1、数据结构优化
频繁拼接字符串用StringBuilder(线程不安全,可变,比String高效,String不可变,每次赋值都是重新创建一个,StringBuffer线程安全,高效),用"+"的方式进行字符串拼接,会产生中间无用的内存块,频繁拼接就会消耗大量内存。
ArrayMap、SparseArray替换HashMap
内存抖动问题
再小的Class至少也要耗费0.5KB的内存
HashMap每一个Entry实体都需要额外占用32B的内存
2、对象复用(为了内存耗用小一点)
复用系统自带的资源
ListView/GridView/RecycalView适配器的ConvertView复用
避免在 onDraw()方法里面执行对象的创建(原因是:onDraw的图像界面,或者view,一有变动,就会重新的调用onDraw()方法,如果这个时候在里面创建对象的话,就会影响绘制时间,如果执行对象创建比较久,那会导致UI卡顿 ,运行就不流畅,而且onDraw()方法是频繁执行的,所以对象的创建也会频繁,效率就会比较低,一般来说把对象创建放在外面)
3、避免内存泄漏
内存泄漏会导致剩余的Heap越来越少,频繁触发GC回收垃圾
Activity是很容易泄漏的
用Application Context而不是Activity Context,Application是全局有效且一直存在着的,Activity是经常进入退出的,很容易造成内存泄漏问题
注意Cursor对象是否及时关闭,BitMap是否资源回收