android 内存优化(二) 性能优化

1)减少view层级,约束布局,相对布局,尽可能减少布局层次
2)<include>和<merge> view可见的时候才用,用viewstub加载不占资源 
3)避免创建不必要的对象
4)图片像素对应的到相应的xdpi目录
5)循环中尽量用int变量赋值遍历,不要老是getsize之类的,循环调用效率低
6)SparseArray比hashmap效率高
7)string与stringbuffer
8)对常量使用static final修饰符
9)for(a:array){}
10)多使用系统封装好的API string字符运算 indexOf() contains 数组拷贝System.arraycopy() 效率比自己写的逻辑效率高
11)避免在内部调用Getters/Setters方法 直接赋值拿值效率高些
12)少使用枚举 占资源
13)内存抖动-短时间内大量的创建垃圾对象,触发GCC,卡顿,
尽量避免在循环体内创建对象,应该把对象创建移到循环体外。
注意自定义View的onDraw()方法会被频繁调用,所以在这里面不应该频繁的创建对象。
当需要大量使用Bitmap的时候,试着把它们缓存在数组中实现复用。
对于能够复用的对象,同理可以使用对象池将它们缓存起来。
主线程不要放耗时操作
GC是无法避免的,我们要避免的是频繁的GC,因此这里的优化实质上是内存优化
14)Executor、 AsyncTask、 HandlerThead、 IntentService 如何选择
HandlerThead就不要用,HandlerThead设计目的就是为了主界面死循环刷新界面,无其他应用场景.
能用线程池就用线程池,因为最简单.
涉及后台线程推送任务到UI线程,可以使用Handler或AsyncTask
Service:就是为了做后台任务,不要UI界面,需要持续存活.有复杂的需要长期存活/等待的场景使用Service.
IntentService:属于Service.当我们需要使用Service,且需要后台代码执行完毕后该Service自动被销毁,使用IntentService.
15)强引用 软引用 弱引用 
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
如果一个对象只具有弱引用,那么在垃圾回收器线程扫描的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用也可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
弱引用与软引用的根本区别在于:只具有弱引用的对象拥有更短暂的生命周期,可能随时被回收。而只具有软引用的对象只有当内存不够的时候才被回收,在内存足够的时候,通常不被回收。

https://blog.csdn.net/u010672559/article/details/103178632 android 内存优化(一) 防止内存泄漏注意事项

https://blog.csdn.net/u010672559/article/details/103178663 android 内存优化(二) 性能优化

https://blog.csdn.net/u010672559/article/details/81098534 android 内存优化(三) 内存优化工具-MAT的使用及实例分析

https://blog.csdn.net/u010672559/article/details/81223122 android 内存优化(四) 性能优化-Systrace分析UI性能-含demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章