Android过度绘制优化Demo及BITMAP优化

开发者选项勾选过度绘制后,打开Demo的MainAcitivity界面,可以看到有几块区域存在3或4倍的过度绘制。

查看代码:

可以看到其中嵌套了多层LinearLayout,并且还有多个background属性,直接去掉这些代码对MainAacitivy进行优化。

点击OVERVIEW的Button,可以看到绘制几个矩形:

并且存在过度绘制,这里查看代码后可以发现几个矩形绘制时bottom参数重叠,对这里进行bottom的计算,修改bottom的值然后优化:

可以看到过度绘制现象减少很多了。

然后点击另一个Button:

打开时感觉到了明显的卡顿,查看代码发现其中嵌套了很多层LinearLayout,并且在OnDraw方法中创建了Paint对象,这是我们要优化的地方,具体可参看代码,基本就这些过度绘制现象。


Bitmap及其他优化:

一般我们都是从网络下载图片到本地后,再加载显示。最大的问题是内存,所以在列表或者多图场景下,最好是缩成所需要规格的Bitmap来使用,如不是直接使用高分辨率的大图。

在用BitmapFactory做decode图片时,安卓本身根据机器和系统版本,会有一个解析图片的内存上限,如果图片比较大,很容易造成OOM错误,所以要使用下面的策略,尽量使生成的图片最小。

看下用BitmapFactory.Options加载图片的实现方法:

我们通过InSampleSize这个方法来缩放Bitmap大图,并且在calculaterInsampleSize方法里我们获取了图片的宽高,并对所需要的inSampleSize进行计算,得到一个合理的缩放值。

Bitmap的一些基本优化措施:

总结下就是缩放大图,复用内存空间,使用缓存机制,选取图片解码格式,使用体积更小的Bitmap图片。

其他优化:

1.使用Method Profing对程序中的耗时方法进行定位,进而优化:

附上一个详细使用链接:http://www.goxuni.com/670369-android-method-profiling-with-ddms/

2.使用Lint对程序代码进行检查及问题定位:

附链接:https://developer.android.com/studio/write/lint.html

在Andorid Studio中点击Analyse,然后点击Inspect Code即可使用Lint工具对代码进行检查。可自定义Lint。

3.使用轻量级容器:

自动装箱和枚举带来的问题及优化可参看课件及相关博客,这里不再赘述了。

results matching ""

    No results matching ""