美文网首页
Android UI性能优化(渲染)

Android UI性能优化(渲染)

作者: 拯救世界的小安安 | 来源:发表于2017-07-30 11:06 被阅读0次

    概述

    谷歌05年初发布性能优化典范,是的开发者学会如何去识别、诊断、解决安卓应用开发中所存在的性能问题。首当其冲的便是渲染的性能优化。

    渲染机制

    一般原生app开发时,自定义view时,因为布局的层次过多,导致不必要的绘制,,或者因为onDraw等方法中有耗时的操作从而使的界面卡顿。
    一般来说,安卓系统美16ms会发出一个信号,触发对ui进行渲染,所以一旦操作超过了16ms酒会发生卡顿的现象。其主要原因就是系统发出信号时,ui无法进行渲染,还在进行别的操作,那么就会导致丢帧的现象。在网上看了看,16ms的原因就是意味1000/60 hz,相当于60fps,人眼感知的一般无法超过60fps。
    所以,总的来说,安卓界面的卡顿原因就在于没有必要的布局、invalidations失效以及Overdraw重新绘制屏幕。
    主要是通过:

    • 通过Hierarchy Viewer去检测渲染效率,去除不必要的嵌套
    • 通过Show GPU Overdraw去检测Overdraw,最终可以通过移除不必要的背景以及使用canvas.clipRect解决大多数问题。

    Overdraw检测

    安卓4.2里面,开发者选项菜单有Debug GPU Overdraw,或者以上的话在屏幕左下角会有一个计数展示屏幕overdraw的程度。
    另一种方式则是在Debug GPU overdraw菜单里选择“Show Overdraw areas”选项。选择之后,会在app的不同区域覆盖不同的颜色来表示overdraw的次数。比较屏幕上这些不同的颜色,可以快速方便的定位overdraw问题:
    白色:没有overdraw 蓝色:1x overdraw(屏幕绘制了2次) 绿色:2x overdraw 浅红色:3x overdraw 深红色:4x或者更多overdraw

    总结通过减少view的数量活着去除重复绘制的view,app的渲染会更快。

    Overdraw处理方案

    移除不要的background

    在正常的开发中,可以移除不必要的background,以减少绘制的程度。
    如设置了主布局文件的背景颜色,就可以移除listview以及listview的items中的一些background。
    以及当我们在layout中设置了背景色,activity的view中的背景就没有必要了,可以调用getWindow().setBackgroundDrawable(null);设置。

    使用clipRect

    当我们绘制了多个view的时候,如果每一个view并不需要完全绘制在屏幕上时,我们就可以在onDraw方法中使用canvas.clipRect(0, 0, 0,0);方法

    Hierarchy Viewer

    安卓sdk中包含着歌工具,在android studio中tools下面的android下的android device monitor就能看到。Hierarchy Viewer可以很方便可视化的查看屏幕上套嵌view结构,是查看你的view结构的实用工具。

    相关文章

      网友评论

          本文标题:Android UI性能优化(渲染)

          本文链接:https://www.haomeiwen.com/subject/momhlxtx.html