时间:2021-05-20
一. 加载
预加载: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开发性能优化总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android平台的开发性允许厂商基于原生系统进行丰富的定制,在经过数年的发展和完善都已经走出了自己的道路,吸引了一批忠实的拥趸。谷歌最新的Android5.0
开发一款性能优良的应用是每一个Android开发者都必须经历的挑战。在移动端资源有限的前提下,提高应用的性能显得尤为重要。常见的提高APP性能的优化方向有三个:
本文较为详细的总结了Android开发常用标签。分享给大家供大家参考。具体如下:android中inputTypeandroid中inputType属性在Edi
本文实例总结了Android开发之资源文件用法。分享给大家供大家参考,具体如下:这里记录在Android开发中经常用到的一些用法arrays.xml定义数组例:
前言在Android开发中,我们有时需要实现类似IOS的对话框。今天我就来总结下,如何通过自定义的开发来实现类似的功能。自定义Dialog我们知道Android