Android应用性能优化最佳实践.2.6 合理的刷新机制
2.6 合理的刷新机制
在应用开发的过程中,因为数据的变化,需要刷新页面来展示新的数据,但频繁刷新会增加资源开销,并且可能导致卡顿发生,所以,需要一个合理的刷新机制来提高整体的UI流畅度。合理的刷新需要注意以下几点:
尽量减少刷新次数。
尽量避免后台有高CPU线程运行。
缩小刷新区域。
2.6.1 减少刷新次数
毫无疑问,减少刷新次数可以减少系统的开销,在功耗和页面的性能上可以表现得更优秀,但不刷新就不能及时让用户看到最新的数据,可以从以下几个方面减少刷新次数:
1.?控制刷新频率
在有些功能上需要频繁刷新某个控件(View),比如下载进度条或者播放进度条,没有必要在数据每次变化时都更新对应的控件,需要注意的是一定不能出现过度刷新(进度刷新频率大于系统显示的刷新频率)的情况。可以通过定时控制刷新频率,相同的刷新只做一次,比如播放进度条的刻度是100,如果数据变化没有1%,完全没有必要刷新,这样可以减少UI的刷新负担。
2.?避免没有必要的刷新
首先需要判断是否需要刷新,比如数据没有变化、需要刷新的控件(View)不在可见区域,就没有必要刷新。但是需要注意,如果一个View从不可见到可见,一定要刷新一次。
一般来说,在第一片数据(从无到有)和最后一片数据(结束了一个刷新周期)时,一定要刷新一次,以保证完整性。
2.6.2 避免后台线程影响
后台线程虽然不会直接影响到主线程的工作,但如果后台线程开销很大,占用CPU过高,导致系统GC频繁和CPU时间片资源紧张,还是有可能会导致页面的卡顿。因此在需要迅速刷新的情况下避免这类线程在高峰工作。比如ListView的滚动,如果ListView中的Item需要下载图片显示,在ListView滚动时可以暂停其他UI的操作,示例代码如下:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
mImageWorker.setPauseWork(true);
} else {
mImageWorker.setPauseWork(false);
}
}
});
通过监听ListView的onScrollStateChanged事件,在滚动时暂停图片下载线程工作,结束后再开始,可以提高ListView的滚动平滑度。
2.6.3 缩小刷新区域
在以下两个场景下可以采用局部刷新的方法来节省更多的资源。
一是在自定义View中。自定义View一般采用invalidata方法刷新。如果需要更新的数据只是在某一个区域内改变,在调用invalidata方法更新这个区域时,也会更新整个视图,这就浪费了不需要更新区域资源。Android提供系统了两个局部更新数据的方法:
invalidate(Rect dirty);
invalidate(int left, int top, int right,int bottom);
使用这两个方法可以只更新需要更新的区域,其他不需要数据更新的区域不会更新,这样能节省部分资源。
第二种是容器中的某个Item发生了变化,只需要更新这一个Item即可。比如在ListView中,如果是单条操作,就必须调用Adapter的notifyDataSetChanged()刷新。
相关文章
- 修复相机应用问题,微软发布 Windows 10 Build 19042.2364 等更新
- 明年 1 月终止支持,微软再次提醒 Windows 8.1 用户尽快升级到 Windows 10 / Windows 11
- 新款 Windows 媒体播放器现已向 Win10 用户推出
- 深度操作系统 20.8 正式发布!
- 跟着小白一起学鸿蒙—HAP应用调用SO库方法
- 大数据应用广发展快
- 论物联网与大数据、云计算、工业物联网
- 解决应用申请权限失败导致安装报错问题
- 大数据时代,是谁在监视着我们?
- 跟着小白一起学鸿蒙—如何编译OpenHarmony自带APP
- Uni-App微信小程序平台兼容常用图表库
- 大数据依赖不可取
- Windows 11 正式版 build 22621.900 发布:提供 OneDrive 存储警报、聚焦与“主题”组合在一起
- 在医疗领域应用大数据面临哪些挑战
- 如何将应用内置到OpenHarmony系统中
- IOC-Golang 的 AOP 原理与应用
- 原生安卓开发App的框架Frida常用关键代码定位
- OpenHarmony北向-无上下状态栏的全屏沉浸式设置
- Fedora Workstation 37 中的新功
- 大数据在智慧城市建设中有哪些应用