Android高级开发之性能优化典范

2019-12-10 18:01:22于丽
本文从电量,视图,内存三个性能方面的知识点给大家介绍android高级开发之性能优化的相关知识,希望对大家有所帮助  

本章介绍android高级开发中,对于性能方面的处理。主要包括电量,视图,内存三个性能方面的知识点。

1.视图性能

(1)Overdraw简介

    Overdraw就是过度绘制,是指在一帧的时间内(16.67ms)像素被绘制了多次,理论上一个像素每次只绘制一次是最优的,但是由于重叠的布 局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,当这个操作耗时超过16.67ms时,就会出现掉帧现象,表现为应用卡顿,所以对重叠不可见元素的重复绘制会产生额外的开销,需要尽量减少Overdraw的发生。

(2)Overdraw检测

    Android提供了测量Overdraw的选项,在开发者选项-调试GPU过度绘制(Show GPU Overdraw),打开选项就可以看到当前页面Overdraw的状态,就可以观察屏幕的绘制状态。该工具会使用三种不同的颜色绘制屏幕,来指示 overdraw发生在哪里以及程度如何,其中:

 •没有颜色: 意味着没有overdraw。像素只画了一次。

 •蓝色: 意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。 

•绿色: 意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。

•浅红: 意味着overdraw 3倍。像素绘制了四次,小范围可以接受。

 •暗红: 意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。

Android,Android开发

提高程序在视图方面的性能, 总的原则就是:尽量避免重叠不可见元素的绘制。

(3)Overdraw改良

1)合理选择控件容器

    Android提供的Layout控件主要包括 LinearLayout、TableLayout、FrameLayout、RelativeLayout。同一个界面可以使用不同的容器控件来表达,但是各个容器控件描述界面的复杂度是不一样的。一般来LinearLayout最易,RelativeLayout较复杂。 LinearLayout只能用来描述一个方向上连续排列的控件,而RelativeLayout几乎可以用于描述任意复杂度的界面。。综上所述: LinearLayout易用,效率高,表达能力有限。RelativeLayout复杂,表达能力强,效率低。从减少overdraw的角度来看,LinearLayout会增加控件数的层级,自然是RelativeLayout 更优,但是当某一界面在使用LinearLayout并不会比RelativeLayout带来更多的控件数和控件层级时,LinearLayout则是首选。