性能优化

2018-10-15  本文已影响0人  要学的东西太多了

1.布局优化,尽量减少布局的层级,删除无用的控件和层级,选择性能较低的ViewGroup。采用include标签,merge标签和ViewStub
include标签用于布局重用,它只支持android:layout_属性,id除外(如果被引用的根布局有id,依然以include标签的id为准),且要使用android:layout_属性,必须指定android:layout_widthandroid:layout_height,否则其他无法生效。
merge标签主要用来减少布局的层级,比如子布局的根布局跟父布局效果一样,那么子布局的根布局其实是不必要的,用merge就可以去掉这个根布局。
ViewStub的作用是按需加载布局,它本身不参与绘制测量过程,在代码中通过setVisibility(View.VISIBLE)inflate方法加载后,它会被内部的布局替换掉。ViewStub不支持merge标签。

2.绘制优化,ViewOnDraw方法不要执行大量的操作(创建新的局部对象或做耗时操作)。

3.内存泄漏优化,一是避免写内存泄漏的代码,二是通过分析工具找出潜在的内存泄漏并解决。常见的内存泄漏如下:
(1)静态变量导致的内存泄漏,常见的就是静态对象对Activity的引用,导致Activity无法正常销毁。
(2)单例模式导致的内存泄漏,常见的是向单例模式的对象注册持有Activity引用的监听,但是没有解注册的操作,因为单例模式的生命周期跟Application是一致的,所以Activity无法及时释放。
(3)属性动画导致的内存泄漏,属性动画中的无限循环这一类需要在Activity销毁的时候停止,否则属性动画持有View,而View又持有Activity,导致Activity无法释放。

4.响应速度优化,避免在主线程中做耗时操作。Activity5秒无响应或BroadCastReceiver10秒无响应,都会造成ANR。通过traces文件可以定位问题。

5.ListView优化和Bitmap优化,ListView优化主要思路是:避免在getView方法做耗时操作;避免快速滑动时引起的大量异步任务执行;开启硬件加速。Bitmap优化则是图片压缩。

6.线程优化,线程优化的思想是采用线程池,避免程序中使用大量的Thread

7.优化建议:

避免创建过多对象。
不要过多使用枚举。
常量用static final修饰。
使用一些Android特有的数据结构。
适当使用软引用和弱引用。
采用内存缓存和磁盘缓存。
内部类尽量采用静态的。

8.提高代码的可读性,主要是命名规范,代码排版合理,关键地方才写注释。

9.代码要有层次感,遵循单一职责原则对代码逻辑进行分层。

10.合理采用设计模式,提高代码的可维护性和可拓展性。

上一篇下一篇

猜你喜欢

热点阅读