UI 界面性能优化(三)

加快界面加载

除了从 XML Layout 文件里面角度减少布局层级,还通过提前加载布局,即在线程中做一些必要的 inflate 等来提前初始化布局,减少实际显示时的耗时。对于一些复杂的布局,我们还会自己做View对象复用池,减少 inflate 带来的性能损耗,特别是在列表控件中。

可以通过 TraceView 工具找出主线程的耗时操作和其他耗时的线程并作优化,另外减少主线程的 GC 停顿。因为即使并行 GC,也会对 heap 加锁,如果主线程请求分配内存的话,也会被挂起,所以尽量避免在主线程分配较多对象和较大的对象,特别是在onDraw等函数中,以减少被挂起的时间。另外可以通过去掉 ListView、ScrollView 等控件的 EdgeEffect 效果,来减少内存分配和加快控件的创建时间。

利用本地缓存,主要界面缓存上次的数据,并配合增量的更新和删除,能做到数据和服务端同步,这样可以直接展示本地数据,不用等到网络返回数据。

减少不必要的数据协议字段,减少名字长度等,并作压缩。还可以通过分页加载数据来加快传输解析时间。因为数据越大,传输和解析时间也会越久,引发的内存对象分配也会越多。

注意线程的优先级,对于占用 CPU 较多时间的函数,也要判断线程的优先级。

自定义控件防止重新布局

ListView 滑动、广告动画变化等过程中,图片和文字有变化,经常会发现整个界面被重新布局,影响了性能。尤其布局复杂时,测量过程很费时,导致明显卡顿。比如对于大小基本固定的控件和布局例如 TextView、ImageView 来说,这是多余的损耗。采取优化措施,我们使用自定义控件来阻断,重写方法requestLayout、onSizeChanged,如果大小没有变化就阻断这次请求。对于 ViewPager 等广告条,可以设置缓存子 View 的数量为广告的数量。

 

你可能感兴趣的:(软件开发)