Android耗电优化实践 (二)

  • Android耗电优化
  • Android耗电优化实践 (一)- 利用Hook方式监控排查耗电
  • Android耗电优化实践 (二)- 检测错误的UI绘制刷新导致的耗电

检测错误的UI绘制刷新导致的耗电

  • 排除由于错误的绘制方法,导致CPU占用过高,进而导致耗电量高

  • 检测方式参考大众点评App的短视频耗电量优化实战

首先打开开发者选项,打开GPU视图更新的开关,然后看看应用内部有哪些不必要的UI刷新,

场景一(自定义TextView)

首页快速组队页面,列表中查看更多在一直刷新,直接看代码,

这里有一个自定义View,继续看TextViewWideContent的代码

分析代码发现在onDraw()里面调用了setPadding(),继续看setPadding()的源码,

可以看到这里面调用了页面invalidate(),这就导致了onDraw()方法的循环调用,所以页面会持续刷新。结论就是在自定义View的onDraw()方法里面,调用setPadding(),会导致页面重复绘制
解决办法也很简单把setPadding放到onLayout()里面去。

场景二(CoordinatorLayout+AppBarLayout错误的依赖关系)


错误代码如下:

在CoordinatorLayout+AppBarLayout页面结构中,错误的将底部依赖于头部控件,导致底部一直在刷新,去掉 app:layout_anchor="@id/user_appbar_layout" 就好了。

场景三(游戏专区页面视频播放导致整体页面刷新)


具体原因还在排查,可能是第三方库导致的,要更换只能换库。

场景四(麦位刷新)



聊天室麦位刷新导致的的页面重绘,这边似乎是需求如此,需要定期刷新。可能有更好的实现方式,先记录一下。

总结一下:

  • 首先自定义View的onDraw()方法里面,不要调onPadding(),如果一定要调用,请放在onLayout()里面设置。
  • CoordinatorLayout+AppBarLayout 结构中,错误的使用app:layout_anchor="@id/user_appbar_layout" 导致整个底部刷新。

相关建议

  • Android电量优化的相关建议

更多相关文章

  1. Android(安卓)应用开发的耗电量控制
  2. android 自带的下拉刷新控件,含Demo(SwipeRefreshLayout控件)
  3. 4.8.4 在Android(安卓)中fragment中获取上下文
  4. 为什么说android UI操作不是线程安全的 分类: Android(安卓)2014-
  5. 【Android(安卓)电量优化】电量优化 ( 耗电量测试 | Battery His
  6. android 自带的下拉刷新控件,含Demo(SwipeRefreshLayout控件)
  7. Android(安卓)实时动态刷新更改菜单
  8. Android(安卓)小知识点
  9. Android(安卓)百度地图笔记

随机推荐

  1. Android(安卓)WebView获取cookie
  2. Android(安卓)JNI NDK Eclipse 设定(避免
  3. Android(安卓)动画 Activity切换动画
  4. Android中下载文件的使用
  5. Android(安卓)CTS 兼容性测试的Fail的一
  6. android异步加载图片
  7. android wifi 强度获得
  8. android发短信
  9. 【Android】Android开源项目精选(一)
  10. android dialog