Android—屏幕适配和卡顿优化
各自的定义:
- px:pixel,像素,屏幕上实际的像素点单位
- dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻
- dp: dip,Density-independent pixel, 设备独立像素
- sp: scale-independent pixel,字体大小单位。
像素密度为160时,1dp = 1px
px = dp*(dpi/160) = dp*density
适配方法
- 使用wrap_content, match_parent, weight要确保布局的灵活性并适应各种尺寸的屏幕
- 使用RelativeLayout或ConstraintLayout,禁用绝对布局。
- 使用Nine-Patch图片
- 使用Size限定符
- 使用Smallest-width限定符
卡顿的两大因素:
界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。
数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。
布局优化
- 使用ConstraintLayout或者RelativeLayout,ConstraintLayout开销较小,尽量减少布局的重叠和嵌套。
- 父布局的宽和高尽量设置成固定值或者match-parent,因为这样在测量尺寸时只需要测量一次。wrap_content,会增加measure计算成本,子View的尺寸可能会动态变化,这样就造成了父布局的尺寸需要多次被测量,影响性能。
- 删除控件中无用属性
- 通用的布局抽出来通过include包含到指定的布局。这样可以实现布局的复用,既可以提高布局性能,也有利于以后的维护。用include时候需要注意,如果想重写被包含布局的layout属性必须在include标签内重写layout_width和layout_height属性,这样重写其它layout属性才有效。
- 如果include标签的外层不是根布局,用merge实现,这样可以减少一层嵌套。用merge实现的布局被include包含后就不能重写其layout属性了(因为merge节点不是一个布局),所以这时候你想对整个被包含布局进行操作(比如设置间距),那么只能在include标签外层包一层布局(比如RelativeLayout),通过该布局来对被包含布局进行整体操作
- ViewStub实现懒加载布局。View.GONE方式在Inflate布局的时候View仍然会创建对象,会实例化。通过ViewStub就可以真正实现需要时才加载布局。
自定义View优化
- 减少不必要的代码
- 不在 onDraw 中做内存分配的事
- 减少 onDraw 被调用的次数,调用视图的setVisibility()、setEnabled()、setSelected()等都会导致视图重绘,如果想要手动地强制让视图进行重绘,可以调用invalidate() 来实现。invalidate()只会重调onDraw方法,onMeasure和onLayout不会。postInvalidate方法应用在非UI线程中
- 减少 requestLayout 的次数,该方法会重调onMeasure和onLayout2个方法,后续可能调用invalidate()。
节省——耗电优化
- 计算优化
- 避免 Wake Lock 使用不当
冷启动与热启动
冷启动
在启动应用时,系统中没有该应用的进程,这时系统会创建一个新的进程分配给该应用;
热启动
在启动应用时,系统中已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程还是保留在后台)
区别:
- 冷启动:系统没有该应用的进程,需要创建一个新的进程分配给应用,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。
- 热启动: 从已有的进程中来启动,不会创建和初始化Application类,直接创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。
Android—屏幕适配和卡顿优化相关推荐
- 深入探索Android卡顿优化(下)
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 在上篇文章中,笔者带领大家学习了卡顿优化分析方法与工具.自动化卡顿检测方案及优化这两块内容. ...
- Android 性能优化(62)---存检测、卡顿优化、耗电优化、APK瘦身——详解篇
Android 性能优化,内存检测.卡顿优化.耗电优化.APK瘦身--详解篇 自2008年智能时代开始,Android操作系统一路高歌,10年智能机发展之路,如今 Android 9.0 代号P 都 ...
- Android性能优化系列篇(三):崩溃优化+卡顿优化
前言 汇总了一下众多大佬的性能优化文章,知识点,主要包含: UI优化/启动优化/崩溃优化/卡顿优化/安全性优化/弱网优化/APP深度优化等等等~ 本篇是第三篇:崩溃优化+卡顿优化 [非商业用途,如有侵 ...
- Android卡顿优化分析
本篇包含的主要内容如下所示: 1.卡顿优化分析方法与工具 2.自动化卡顿检测方案及优化 在某个 App 的时候,有时我们会看到某个 App 运行起来,即出现了卡现象,如何去定义发生了卡现象呢?马上来了 ...
- Android手机为何不再卡顿?性能优化才是安卓起飞关键
现在谈到挂载 Android系统的 手机,大部分人的印象早已不像前几年,几年前的安卓机那是用了一段时间就变得有点卡顿,用1年就卡的动弹不得,不得不每年都更换新机. 为什么以前会出现这种情况呢?其实主要 ...
- Android 卡顿优化之 Skipped * frames 掉帧的计算
Android 卡顿优化之 Skipped * frames 掉帧的计算 有时候看日志的时候,可能会在日志中看到类似下文的打印: Skipped 30 frames! The application ...
- 深入探索Android卡顿优化
由于卡顿优化这一主题包含的内容太多,为了更详细地进行讲解,因此,笔者将它分为了上.下两篇.本篇,即为<深入探索Android卡顿优化>的上篇. 本篇包含的主要内容如下所示: 卡顿优化分析方 ...
- Android性能分析之---卡顿分析
一.性能分析---场景 低性能的APP常见的表现有启动/界面切换慢.动画掉帧.卡顿(启动卡,点击按钮卡,进入新页面卡等).耗电,甚至出现应用无响应.程序崩溃的现象.当我们着手解决这些性能问题时,面对的 ...
- 常用 Android 开发者选项与卡顿原因
应用UI卡顿 常见原因主要在以下几个方面: 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿: 2.布局Layout过于复杂,无法在16ms内完成渲染: 3.同一时间动画执行的次数过多,导致CPU ...
最新文章
- c rs232 mysql_C++操作mysql方法总结(2)
- C++ 各种构造函数
- 在线实时大数据平台Storm并行度试验
- c++中的enum类型
- 模板方法模式(Tempalte Method Pattern)
- 异步加载js文件并执行js方法:实现异步处理网页的复杂效果
- C# char[]与string之间的相互转换
- [NLP] TextCNN模型原理和实现
- 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。
- 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】
- rpc之使用httpserver实现tpc
- c/c++ linux 进程 fork wait函数
- ubuntu中fcitx输入法不显示拼音与候选词框
- 2021年山西省粮食种植面积增长,夏粮获大丰收,但因秋粮遭遇自然灾害粮食产量下降[图]
- python爬虫微信刷票_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...
- CSS3表单设计–复古
- Java 小练习(图形面积计算器)
- imx6ull 以太网
- ImportError: Couldn‘t import Django
- 雷锋网的那些段段(一)。
热门文章
- java 同类调用方法_JAVA中同类中方法的调用问题?
- 3算法全称_全网最通俗的KMP算法图解
- android工程引入unity,Unity导出Android Studio工程
- android rtsp协议转http协议_网络协议HTTP 协议(一)
- md5加密 java原理_md5 32位 加密原理 Java实现md5加密
- 读者问:小公司,但工资高,能去吗?
- 关于21年电赛,这些一定要熟悉!
- 开源项目|从0到1教你搭建一个适配于智能车的目标检测系统
- 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(上)——网络
- 为什么matlab显示error,【求救】我安装了资源 MATLAB R2012b 后,显示有error……