App性能优化
性能优化:
用户体验的性能主要总结为4个类别:
- 流畅:使用时避免出现卡顿,响应速度快,减少用户等待的时间,满足用户期望。
- 稳定:减低crash率和ANR率,不要在用户使用过程中崩溃和无响应。
- 省点、省流量:节省流量和耗电,减少用户使用成本,避免使用时导致手机发烫。
- 安装包小:安装包小可以降低用户的安装成本。
卡顿优化:
卡顿的场景有很多,可分为4类:UI绘制、应用启动、页面跳转和事件响应,这4种卡顿的原因可为2大类:
- 界面绘制:绘制的层级深、页面复杂、刷新不合理,这些原因卡顿的场景更多出现在UI和启动后的初始界面以及跳转页面的绘制上。
- 数据处理:导致卡顿的原因是数据处理量太大,可分为如下3种情况
(1)、数据处理UI线程。
(2)、数据处理占用CPU高,导致主线程拿不到时间片。
(3)、内存增加导致GC频繁,从而引起卡顿。
优化建议:
1.布局优化:主要通过减少层级、测量、绘制时间和提高复用性方面入手,总结如下
- 减少层级:合理使用RelativeLayout和LinerLayout,合理使用Merge。
- 提高显示速度:使用ViewStub,它是一个看不见、不占布局位置、占用资源非常少的视图对象。
- 布局复用:通过<include>标签提高布局复用
- 减少测量:尽可能少用wrap_content,它会增加布局measure时计算成本,在已知宽高为固定值时,不用wrap_content。
- 删除控件中无用的属性
2.过度绘制:屏幕上的某个像素在同一帧时间内被绘制多次,从而浪费多余的CPU以及CPU资源,避免过度绘制方法如下:
- 布局上优化:移除XML中非必要的背景、Window默认的背景、显示占位背景图片。
- 自定义View优化:使用canvas.clipRect()帮助系统识别可见的区域,只有这个区域内才会被绘制。
3.启动优化:优化启动逻辑,提高应用的启动速度。启动主要完成UI布局、绘制和数据准备,因此启动速度优化需要以下三个过程:
- UI布局:应用一般都有闪屏页,优化闪屏页的UI布局,可通过Profile GPU Rendering检测丢帧情况
- 加载逻辑优化:采用分布加载、异步记载、延期加载策略提高应用启动速度。
- 数据准备:数据初始化分析,记载数据可用线程初始化等策略。
4.合理刷新:数据变化,需要刷新页面展示新的数据,频繁刷新会增加资源开销,并且可能导致卡顿,合理刷新注意以下几点:
- 尽量减少刷新次数。
- 尽量避免后台有高的CPU线程运行。
- 缩小刷新区域
5.动画优化:有些情况下,实现动画效果时,可以用硬件加速方式提供流畅度。
优化内存:
没有内存