Android应用优化之布局优化

Android系统每隔16ms发出VSYNC信号,触发对UI的渲染,想要达到界面流畅,必须实现60fps,也就意味着大多数的操作必须在16ms内完成。

除了界面过于复杂导致的渲染不能及时完成之外,还存在过度绘制的问题。过度绘制就是某个像素在同一帧的时间内被绘制多次,在多层次的UI界面中,如果不可见的UI也在进行绘制,那么这些重合区域的像素就会被绘制多次,从而浪费大量的CPU和GPU资源。过度绘制也发生在背景重叠的情况下,比如Layout中有自己的背景,同时子View中有自己的背景。

如何检测?

1.使用HierarchyViewer来查找Activity中的布局是否过于复杂;

2.在开发者选项中打开Show GPU Overdraw选项进行观察是否存在过度绘制;

3.在开着选项中选择Profile GPU Rendering,选中On screen as bar;

4.使用TraceView来观察CPU的执行情况。

如何优化?

1.减少布局的层级,合理的使用include、merge、ViewStub;

2.自定义组件的onDraw()中避免大量创建临时对象,比如String,以免频繁触发GC;

3.自定义组件的onDraw()中,考虑使用canvas.clipRect()绘制需要被绘制的区域;

4.对于listView这样的组件容器,考虑使用convertView、ViewHolder;

5.考虑使用性能更高的组件,比如推荐使用RecycleView来代替ListView,使用staticlayout来实现自动换行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,962评论 25 709
  • 界面是 Android 应用中直接影响用户体验最关键的部分。如果代码实现得不好,界面容易发生卡顿且导致应用占用...
    passiontim阅读 5,824评论 0 8
  • 注:本文是我在 Android 界面性能调优知识的系统性总结,纯属个人碎碎念。秉持开源分享的原则发布本文出来,各位...
    东经315度阅读 4,062评论 0 8
  • 一座城的距离有多远?远到你可能从未想过会路过这座城,或者想过,却从未计划。天涯海角的距离不过令人望而生畏,而从未想...
    秋风沐雨阅读 2,481评论 0 0
  • 你大概不知道 我的心里那片海 藏了多少波浪 才给你看的风平浪静
    superJane阅读 1,436评论 0 0

友情链接更多精彩内容