优化布局的结构
布局结构太复杂,会减慢渲染的速度,造成性能瓶颈。我们可以通过以下这些惯用、有效的布局原则来优化:
- 避免复杂的View层级。布局越复杂就越臃肿,就越容易出现性能问题,寻找最节省资源的方式去展示嵌套的内容;
- 尽量避免在视图层级的顶层使用相对布局
RelativeLayout
。相对布局RelativeLayout
比较耗资源,因为一个相对布局RelativeLayout
需要两次度量来确保自己处理了所有的布局关系,而且这个问题会伴随着视图层级中的相对布局RelativeLayout
- 布局层级一样的情况建议使用线性布局
LinearLayout
代替相对布局RelativeLayout
*,因为线性布局LinearLayout
性能要更高一些;确实需要对分支进行相对布局RelativeLayout
的时候,可以考虑更优化的网格布局GridLayout
- 相对复杂的布局建议采用相对布局
RelativeLayout
,相对布局RelativeLayout
可以简单实现线性布局LinearLayout
- 不要使用绝对布局
AbsoluteLayout
- 将可重复使用的组件抽取出来并用
</include>
- 使用
merge
- 去掉多余的不可见背景。有多层背景颜色的布局,只留最上层的对用户可见的颜色即可,其他用户不可见的底层颜色可以去掉,减少无效的绘制操作;
- 尽量避免使用 layout_weight 属性。使用包含 layout_weight 属性的线性布局
LinearLayout
每一个子组件都需要被测量两次,会消耗过多的系统资源。在使用ListView
标签与GridView
标签的时候,这个问题显的尤其重要,因为子组件会重复被创建。平分布局可以使用相对布局RelativeLayout
- 合理的界面的布局结构应是宽而浅,而不是窄而深;
优化处理逻辑
- 按需载入视图。某些不怎么重用的耗资源视图,可以等到需要的时候再加载,提高UI渲染速度;
- 使用
ViewStub
- 动态地 inflation view 性能要比用
ViewStub
标签的 setVisiblity 性能要好,当然某些功能的实现采用ViewStub
- 尽量避免不必要的耗资源操作,节省宝贵的运算时间;
- 避免在 UI 线程进行繁重的操作。耗资源的操作(比如 IO 操作、网络操作、SQL 操作、列表刷新等)耗资源的操作应用后台进程去实现,不能占用 UI 线程,UI 线程是主线程,主线程是保持程序流畅的关键,应该只操作那些核心的 UI 操作,比如处理视图的属性和绘制;
- 最小化唤醒机制。我们常用广播来接收那些期望响应的消息和事件,但过多的响应超过本身需求的话,会消耗多余的 Android 设备性能和资源。所以应该最小化唤醒机制,当应用不关心这些消失和事件时,就关闭广播,并慎重选择那些要响应的 Intent 。
- 为低端设备考虑,比如 512M 内存、双核 CPU 、低分辨率,确保你的应用可以满足不同水平的设备。
- 优化应用的启动速度。当应用启动一个应用时,界面的尽快反馈显示可以给用户一个良好的体验。为了启动更快,可以延迟加载一些 UI 以及避免在应用
Application