欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发性能优化总结

程序员文章站 2024-03-05 12:12:06
一. 加载 预加载:1.反射注解框架reflect信息,在application内多线程预加载至缓存。2.资源预加载 懒加载:1.fragment懒加载2.资源懒加载...

一. 加载

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

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

二. 缓存

1. http缓存,淘汰时间

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

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

三. 异步防止anr

1. 避免在ui线程做太多耗时操作,intentreceiver > 10s anr

2. 并发操作多用读写锁,少用synchronized,android虚拟机art直到android6.0为止尚未对synchronized做cas优化,而synchronized在hotspot性能还可以。

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

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

四. 防止oom

1. bitmap:懒加载,lru缓存,bitmap压缩(根据imageview大小),分块加载大图。

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

3. listview&gridview做复用优化。利用viewholder,settag

五. view优化

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

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

3. ondraw()优化,避免在ondraw里new paint()等耗时操作,ondraw内仅应当保留必须代码。

六.内存泄漏

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

2.hashmap避免使用hashcode可变的key

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

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

5.即时释放例如file,cusor,stream,socket等资源对象,因为jni层持有其java层的引用。

6.非静态的匿名内部类。常见于runnable和handler。

七.使用性能优秀的map

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

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

3. sparsearray,二分法加上只能以int为key,性能较高。

以上所述是小编给大家介绍的android开发性能优化总结,希望对大家有所帮助