Android内存优化--内存泄露解决方案

前言

在Android中, 内存优化相对还是很重要的,Android手机不像电脑,系统分配的堆大小开始为16M,后来普遍提升为24M,虽然从硬件上优化了不小,但从宏观上来说,还是少的可怜。所以在Android中,内存优化也是作为成熟程序员应该注意的地方。

关于Davilk与Java中的JVM

因为Android系统的小,自然跑起来很吃力,不适合大人们(电脑)的世界(可能不是这个原因),Google出了个Davilk虚拟机大大提升了Java代码编译效率,以更适合Android系统来运行,跑起来也快了好多。详情见《Davilk与JVM的区别》

那么,在Android实际开发中,造成的内存泄露大概有下面这些:

1.注册没取消注册引发的内存泄露。

在Activity中, 当用户在onCreate方法中注册一个广播调用了registerBroadcastReceiver,在onDestroy里没有unRegistBroadcast掉,那么久会发生内存泄露OutOfMemory异常。所以程序员要养成一个好的编程习惯, 注册和取消注册的方法一块写,就可以避免这类异常了。

2.对象没有清理造成的内存泄露(这是要注意的)

我们通常会将一些对象使用如果没有清理掉,特别是被static修饰的对象, 他会一直存留在内存中,在程序运行的过程中,越集越多,那么内存就泄露了。同时,为了减少这种情况出现,尽量少用static,更加避免用static修饰占内存比较大的内存对象,比如Bitmap,Context。

3.数据交互引发的内存泄露。

在数据交互中,加载大量字节数据到内存也会爆掉, 

(1)上传下载文件引发的内存泄露:这种情况也会有,要是使用热门的网络开源框架一般不会出现。

(2)从数据库查询数据返回的Cursor。当数据量到达一定程度时,使用完Cursor而不调用cursor.close()方法。虽然Dalvik也有GC机制来回收,但是在Android系统中似乎更加倾向于用户调用Cursor.close()来释放对象里面的资源,并调用cursor=null来提示GC释放cursor对象。

(3)其他常用代码引发的内存泄露。

(3.1)Bitmap   。  Bitmap也是消耗大内存的对象,在使用完后不调用bitmap.recycle()来释放资源。如果你的图片显示也使用第三方开源框架的话一般也不用考虑了(别人家的孩子成绩棒,别人家的框架好)。

(3.2)线程      一般在一个进程内,线程的也是需要进行管理的。

(3.3)Adapter   



你可能感兴趣的:(android)