看各大神的博客总结了一下。
数据结构优化
- 频繁的字符串怕拼接用StringBuilder ,也就是尽量不要使用String相加 ArrayMap ,SparseArray
替换HashMap - 内存抖动 再小的class也会消耗0.5k的内存,并不是一味的面向对象就好
对象复用
- 复用系统自带的资源
- ListView/GridView的congteverView复用
- 避免在onDraw方法里面执行对象的创建,因为onDraw会频繁调用
避免内存泄漏
- 内存泄漏:由于代码瑕疵,导致这块内存,虽然是停止不用了。但依然被其他东西引用着,是的GC无法对它进行回收(你认为内存被回收了)
- 内存泄漏会导致剩余可用Heap越来越少,频繁触发GC,尤其是Activity
- 用Application Context而不是ACtivity Context(Activity
Context被传递到其他实例中,这可能导致自身被引用而发生泄漏。) - 注意Cursor对象是否及时关闭
note:虽然在大多数情况下,我们会对Bitmap增加缓存机制,但是在某些时候,部分Bitmap是需要及时回收的。例如临时创建的某个相对比较大的bitmap对象,在经过变换得到新的bitmap对象之后,应该尽快回收原始的bitmap,这样能够更快释放原始bitmap所占用的空间。
注意监听器的注销
- 在Android程序里面存在很多需要register与unregister的监听器,我们需要确保在合适的时候及时unregister那些监听器。自己手动add的listener,需要记得及时remove这个listener。
注意缓存容器中的对象泄漏
有时候,我们为了提高对象的复用性把某些对象放到缓存容器中,可是如果这些对象没有及时从容器中清除,也是有可能导致内存泄漏的。例如,针对2.3的系统,如果把drawable添加到缓存容器,因为drawable与View的强应用,很容易导致activity发生泄漏。而从4.0开始,就不存在这个问题。解决这个问题ÿ