Android性能优化总结

简要总结一下Android性能优化。


一.  加载

预加载:1.反射注解框架Reflect信息,在Application内多线程预加载至缓存。2.资源预加载

懒加载:1.Fragment懒加载2.资源懒加载

二.  缓存

1.    Http缓存,淘汰时间

2.    图片缓存,bitmap压缩,Lru淘汰,持久化二级缓存

3.    反射注解框架Reflect信息缓存,防止多次反射操作

4.   对于频繁生灭的对象使用对象缓冲池,参考Android官方Message的设计。

三.  异步防止Anr

1.    避免在UI线程做太多耗时操作,IntentReceiver > 10s Anr

2.    并发操作多用读写锁,少用synchronizedAndroid虚拟机Art直到Android6.0为止尚未对synchronizedCAS优化,而synchronizedhotspot性能还可以。

3.    使用线程池,结合图片异步加载等需要开大量子线程时做到线程复用。

4.    不需要时取消任务,如Activity被结束时取消正在进行的加载任务。

四.  防止OOM

1.    Bitmap:懒加载,LRU缓存,Bitmap压缩(根据ImageView大小),分块加载大图。

2.    大文件,如txt等,分段加载。

3.    ListView&GridView做复用优化。利用ViewHoldersetTag

五.  View优化

1.    优化布局层次,布局复用,善用include,merge等标签。

2.    避免过度绘制,减少元素,布局的重叠,开启DebugGPU overdraw调试,使用Hierarchy Viewer。简单说就是多次无意义调用onDraw所造成的主线程的性能浪费,可能是帧数下降。

3.    onDraw()优化,避免在onDrawnew Paint()等耗时操作,onDraw内仅应当保留必须代码。

六.内存泄漏(http://blog.csdn.net/ganyao939543405/article/details/52229059)

      1.dump内存进行分析,也可以使用leakcanary库。

      2.HashMap避免使用HashCode可变的key

      3.谨慎处理Context对象,因为其生命周期由Framework管理,尽量避免私自持有。

      4.小心静态变量,及时清除存储在static中的废弃对象。

      5.即时释放例如File,Cusor,Stream,Socket等资源对象,因为jni层持有其java层的引用。、

      6.非静态的匿名内部类。常见于RunnableHandler

.使用性能优秀的Map

      1.线程安全的mapConcurrentHashMap,其使用了分段锁,优化并发性能。

2.使用ArrayMap,空间性能较高。它不是一个适应大数据的数据结构,相比传统的HashMap速度要慢,因为查找方法是二分法,并且当你删除或者添加数据时,会对空间重新调整,在使用大量数据时,效率并不明显,低于50%

3. SparseArray,二分法加上只能以intkey,性能较高。







猜你喜欢

转载自blog.csdn.net/ganyao939543405/article/details/52589598