全网最新:面向Android开发中的“卡顿问题及解决方法”( 二 )


● 减少布局层次结构,避免多层嵌套推荐使用、等父类布局
● 基本控件 性能比高一些,要提前根据UI想好哪个布局更合适,要有的方式,对症下药
● 自定义View尽可能只更新渲染局部区域,杜绝不断全部重绘
● 推荐使用IDE自带的Lint或者阿里代码检查插件,对于标黄警告等提示重视起来,能改的就改
除了以上,我们就要解决过度绘制,我们还可以使用抽象布局,它们分别是、merge和三个标签,现在我们就来认识认识它们吧
● 应该是最常用的了,其翻译是“包含”、“包括”,最佳使用就是把相同代码抽离出来成一个独立的xml文件,当你在某个布局需要使用的时候直接进来,这样一搞,很好地起到复用布局的效果 。不仅可以极大地减少代码量,想要修改的话直接改这一个xml就行了
● 它的两个主要属性::必填属性,id属性
我们还可以重写宽高、边距和可见性()这些布局属性 。但是一定要注意,单单重写:或者:是不行,必须两个同时重写才起作用
引起应用卡顿的原因
UI造成的卡顿
● 过度绘制:就是在同一帧情况下对同一块像素区域进行重复绘制 。这样会加重GPU跟CPU的渲染压力,导致渲染时间过长
● 布局嵌套过多;布局嵌套过多过于复杂也会导致CPU跟GPU的渲染,计算,绘制压力
动画执行次数过多
● 执行耗时操作;文件读写,数据操作,较大数据初始化等较为耗时的操作阻塞线程
● 频繁GC;执行GC的时候,所有操作都需要暂停,等到GC结束后,才能继续执行操作 。这样就可能会阻塞CPU跟GPU的渲染,计算跟绘制
UI优化
● 多余Bg移除
● ui重叠区域优化 .
● 减少ui层级
● 耗时方法分析与优化
● 多样式布局采用单一rv处理
卡顿优化
应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现 。卡顿的场景有很多,按场景可以分为4类:UI 绘制、应用启动、页面跳转、事件响应,如图:
这4种卡顿场景的根本原因
界面绘制
【全网最新:面向Android开发中的“卡顿问题及解决方法”】● 主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上 。
数据处理
● 导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿 。=
引起卡顿的原因很多,但不管怎么样的原因和场景,最终都是通过设备屏幕上显示来达到用户,归根到底就是显示有问题
影响绘制的根本原因
● 绘制任务太重,绘制一帧内容耗时太长
● 主线程太忙,根据系统传递过来的 VSYNC 信号来时还没准备好数据导致丢帧
● 绘制耗时太长,可利用工具帮助我们定位问题(这里推荐使用友盟+u-apm应用性能监控平台)
● 主线程太忙则需要注意了,主线程关键职责是处理用户交互,在屏幕上绘制像素,并进行加载显示相关的数据,所以特别需要避免任何主线程的事情,这样应用程序才能保持对用户操作的即时响应 。总结起来,主线程主要做以下几个方面工作:
● UI 生命周期控制
● 系统事件处理
● 消息处理
● 界面布局
● 界面绘制
● 界面刷新
除此之外,应该尽量避免将其他处理放在主线程中,特别复杂的数据计算和网络请求等
尾述
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面