常用的内存优化方法:
代码优化
Bitmap优化
ListView优化
界面更新及线程优化
数据库优化
代码优化:
尽量减少对某些资源和对外象的长期的引用,
1、由于我们程序的失误,长期保持某些资源(如Context)的引用,造成内存泄露,资源造成得不到释放。应该尽量避免static成员变量引用资源耗费过多的实例,比如Context。
Context,因为Application的Context的生命周期比较长,引用它不会出现内存泄露的问题。
mContextRef
Bitmap优化:
1、及时的销毁。
虽然,系统能够确认Bitmap分配的内存最终会被销毁,但是由于它占用的内存过多,所以很可能会超过java堆的限制。因此,在用完Bitmap时,要及时的recycle掉。recycle并不能确定立即就会将Bitmap释放掉,但是会给虚拟机一个暗示:“该图片可以释放了”。
2、设置一定的采样率。
有时候,我们要显示的区域很小,没有必要将整个图片都加载出来,而只需要记载一个缩小过的图片,这时候可以设置一定的采样率,那么就可以大大减小占用的内存。如下面的代码:
3、巧妙的运用软引用(SoftRefrence)
4、图片尽量使用9path图片
(一个像素2个字节),,要求较低则使用ALPHA_8(一个像素1个字节),
ListView优化
使用viewHolder减少对象的创建
使用convertView使用已创建过的对象
尽量使用分批加载或分页加载
在快速滑动的时候不更新当前条目的内容(根据listView的onScrollView
图片使用三级缓存策略
界面更新及线程优化
不要在主线程中做耗时的操作,如果有耗时的操作需要另开线程
在应用中不要开太多的线程,线程太多无法控制线程的生命周期,导致内存泄漏
尽量使用线程池
数据库优化
在使用完数据库以后尽量关闭连接
使用索引增加查询速度
尽量使用联合查询 避免多次查询
尽量使用事务