各自的定义:

  • px:pixel,像素,屏幕上实际的像素点单位
  • dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻
  • dp: dip,Density-independent pixel, 设备独立像素
  • sp: scale-independent pixel,字体大小单位。

像素密度为160时,1dp = 1px

px = dp*(dpi/160) = dp*density

适配方法

  1. 使用wrap_content, match_parent, weight要确保布局的灵活性并适应各种尺寸的屏幕
  2. 使用RelativeLayout或ConstraintLayout,禁用绝对布局。
  3. 使用Nine-Patch图片
  4. 使用Size限定符
  5. 使用Smallest-width限定符

卡顿的两大因素:

界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。

数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。

布局优化

  1. 使用ConstraintLayout或者RelativeLayout,ConstraintLayout开销较小,尽量减少布局的重叠和嵌套。
  2. 父布局的宽和高尽量设置成固定值或者match-parent,因为这样在测量尺寸时只需要测量一次。wrap_content,会增加measure计算成本,子View的尺寸可能会动态变化,这样就造成了父布局的尺寸需要多次被测量,影响性能。
  3. 删除控件中无用属性
  4. 通用的布局抽出来通过include包含到指定的布局。这样可以实现布局的复用,既可以提高布局性能,也有利于以后的维护。用include时候需要注意,如果想重写被包含布局的layout属性必须在include标签内重写layout_width和layout_height属性,这样重写其它layout属性才有效。
  5. 如果include标签的外层不是根布局,用merge实现,这样可以减少一层嵌套。用merge实现的布局被include包含后就不能重写其layout属性了(因为merge节点不是一个布局),所以这时候你想对整个被包含布局进行操作(比如设置间距),那么只能在include标签外层包一层布局(比如RelativeLayout),通过该布局来对被包含布局进行整体操作
  6. ViewStub实现懒加载布局。View.GONE方式在Inflate布局的时候View仍然会创建对象,会实例化。通过ViewStub就可以真正实现需要时才加载布局。

自定义View优化

  1. 减少不必要的代码
  2. 不在 onDraw 中做内存分配的事
  3. 减少 onDraw 被调用的次数,调用视图的setVisibility()、setEnabled()、setSelected()等都会导致视图重绘,如果想要手动地强制让视图进行重绘,可以调用invalidate() 来实现。invalidate()只会重调onDraw方法,onMeasure和onLayout不会。postInvalidate方法应用在非UI线程中
  4. 减少 requestLayout 的次数,该方法会重调onMeasure和onLayout2个方法,后续可能调用invalidate()。

节省——耗电优化

  • 计算优化
  • 避免 Wake Lock 使用不当

冷启动与热启动

冷启动
在启动应用时,系统中没有该应用的进程,这时系统会创建一个新的进程分配给该应用;

热启动
在启动应用时,系统中已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程还是保留在后台)

区别

  • 冷启动:系统没有该应用的进程,需要创建一个新的进程分配给应用,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。
  • 热启动: 从已有的进程中来启动,不会创建和初始化Application类,直接创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

Android—屏幕适配和卡顿优化相关推荐

  1. 深入探索Android卡顿优化(下)

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 在上篇文章中,笔者带领大家学习了卡顿优化分析方法与工具.自动化卡顿检测方案及优化这两块内容. ...

  2. Android 性能优化(62)---存检测、卡顿优化、耗电优化、APK瘦身——详解篇

    Android 性能优化,内存检测.卡顿优化.耗电优化.APK瘦身--详解篇 自2008年智能时代开始,Android操作系统一路高歌,10年智能机发展之路,如今 Android 9.0 代号P  都 ...

  3. Android性能优化系列篇(三):崩溃优化+卡顿优化

    前言 汇总了一下众多大佬的性能优化文章,知识点,主要包含: UI优化/启动优化/崩溃优化/卡顿优化/安全性优化/弱网优化/APP深度优化等等等~ 本篇是第三篇:崩溃优化+卡顿优化 [非商业用途,如有侵 ...

  4. Android卡顿优化分析

    本篇包含的主要内容如下所示: 1.卡顿优化分析方法与工具 2.自动化卡顿检测方案及优化 在某个 App 的时候,有时我们会看到某个 App 运行起来,即出现了卡现象,如何去定义发生了卡现象呢?马上来了 ...

  5. Android手机为何不再卡顿?性能优化才是安卓起飞关键

    现在谈到挂载 Android系统的 手机,大部分人的印象早已不像前几年,几年前的安卓机那是用了一段时间就变得有点卡顿,用1年就卡的动弹不得,不得不每年都更换新机. 为什么以前会出现这种情况呢?其实主要 ...

  6. Android 卡顿优化之 Skipped * frames 掉帧的计算

    Android 卡顿优化之 Skipped * frames 掉帧的计算 有时候看日志的时候,可能会在日志中看到类似下文的打印: Skipped 30 frames! The application ...

  7. 深入探索Android卡顿优化

    由于卡顿优化这一主题包含的内容太多,为了更详细地进行讲解,因此,笔者将它分为了上.下两篇.本篇,即为<深入探索Android卡顿优化>的上篇. 本篇包含的主要内容如下所示: 卡顿优化分析方 ...

  8. Android性能分析之---卡顿分析

    一.性能分析---场景 低性能的APP常见的表现有启动/界面切换慢.动画掉帧.卡顿(启动卡,点击按钮卡,进入新页面卡等).耗电,甚至出现应用无响应.程序崩溃的现象.当我们着手解决这些性能问题时,面对的 ...

  9. 常用 Android 开发者选项与卡顿原因

    应用UI卡顿 常见原因主要在以下几个方面: 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿: 2.布局Layout过于复杂,无法在16ms内完成渲染: 3.同一时间动画执行的次数过多,导致CPU ...

最新文章

  1. c rs232 mysql_C++操作mysql方法总结(2)
  2. C++ 各种构造函数
  3. 在线实时大数据平台Storm并行度试验
  4. c++中的enum类型
  5. 模板方法模式(Tempalte Method Pattern)
  6. 异步加载js文件并执行js方法:实现异步处理网页的复杂效果
  7. C# char[]与string之间的相互转换
  8. [NLP] TextCNN模型原理和实现
  9. 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。
  10. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】
  11. rpc之使用httpserver实现tpc
  12. c/c++ linux 进程 fork wait函数
  13. ubuntu中fcitx输入法不显示拼音与候选词框
  14. 2021年山西省粮食种植面积增长,夏粮获大丰收,但因秋粮遭遇自然灾害粮食产量下降[图]
  15. python爬虫微信刷票_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
  16. CSS3表单设计–复古
  17. Java 小练习(图形面积计算器)
  18. imx6ull 以太网
  19. ImportError: Couldn‘t import Django
  20. 雷锋网的那些段段(一)。

热门文章

  1. java 同类调用方法_JAVA中同类中方法的调用问题?
  2. 3算法全称_全网最通俗的KMP算法图解
  3. android工程引入unity,Unity导出Android Studio工程
  4. android rtsp协议转http协议_网络协议HTTP 协议(一)
  5. md5加密 java原理_md5 32位 加密原理 Java实现md5加密
  6. 读者问:小公司,但工资高,能去吗?
  7. 关于21年电赛,这些一定要熟悉!
  8. 开源项目|从0到1教你搭建一个适配于智能车的目标检测系统
  9. 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(上)——网络
  10. 为什么matlab显示error,【求救】我安装了资源 MATLAB R2012b 后,显示有error……