一、如何评价一个应用的好坏?
二、如何评价一个应用的性能?
三、快
Android中主线程的关键职责是处理用户交互,在屏幕上绘制像素,开发中应该避免任何阻碍主线程的事情,才能对用户操作及时响应。
应用慢、卡顿的根本原因:
1、绘制任务太重,绘制一帧耗时太长;
2、主线程太忙,VSync信号来时没有准好绘制数据,导致丢帧。
3.1 UI渲染任务重
3.1.1 减少布局层级
- ConstraintLayout、RelativeLayout、
- Merge、ViewStub
- 自定义layout
3.1.2 减少绘制时间
- RelativeLayout有性能低的问题,会对子view做两次测量布局(横向、纵向)。有开源的只做一次测量的精简版RelativeLayout。
- LinearLayout有weight属性,也需要两次测量。
- 少用wrap_content,减少measure成本
- 删除无用的属性
- 减少过度绘制,去掉重叠区域多余的背景Activity主题色、Window默认背景,自定义view时看不见的区域可以不用绘制
canvas.clipRect()
。同一个区域避免绘制多次。 - 从设计上减少圆角、阴影、透明、动效,可大幅降低绘制时间
- 内容预绘制,比如
StaticLayout
、优化后的Textview -->PrecomputedText
3.1.3 布局复用
- include
- view pool、view holder
3.2 主线程太忙
分析应用耗时可以参看之前的一篇文章 Android性能优化之CPU Profiler。
3.2.1 内存优化
内存的不合理使用对UI卡顿、耗电、稳定性都有不同程度的影响。所以内存优化是性能优化中最重要的优化之一。
具体实现可以参考之前的文章《Android中高效的显示图片》。
3.2.2 存储优化
四、稳
4.1 Code Review 方法论
4.1.1 code review的时机:
- 底层公共模块、与其他模块耦合的功能变更代码;
- 重大feature代码;
- 新同事的代码;
- 发布前紧急集成的代码;
4.1.2 code review的人:
- 团队审查;
- 模块负责人;
- 结对审查;
4.1.3 code review流程:
- 先审查实现思路;
- 再审查设计模式;
- 接着审查核心代码;
- 最后审查实现代码。
五、小
六、监控
监控的意义:
- 发现问题
- 验证优化效果
监控收集的信息:
- 基础信息
用户信息:账号、设备号、地理位置
设备信息:系统版本、硬件型号、APP版本
系统状态:内存状态、CPU使用率、网络状态
2、错误信息
crash堆栈、anr trace文件