先来看一个奇怪的问题:
玩android细心一点的就会发现,当打开一个app,点击菜单上的任意一个页面,退回主菜单,看一下ddms,这时的heap used大约在3.5m左右。这时候如果再点击一个页面,退回来,再点击同一个,再退回来,然后无数次(理论上的,呵呵,10次即OK)。
理论上,这个页面所处的activity被销毁,与之相关所有的内存被GC,内存还会在3.5m。
结果是,仅仅10次重复打开关闭同一个activity,内存使用变成5.2m了!而且这多出来的1.7m怎么也去不掉!狂点cause gc? 不理你!我被抛弃了!
痛苦的思索之后,冷静下来,从java的GC机制开始分析。。。。。
我们说GC(Garbage Collection)的真正目的是什么?显而易见。回收没有被其他对象引用到的对象,或者说是引用数为0的对象。
1、释放new出来的对象或者比如findViewById()、 getResourceById()的对象变量
activity在创建界面的时候,由setContentView创建一个主view(即绘制整个界面的父view),由于在finish的时候,这个view还持有activity的引用,因此activity无法被回收,造成内存泄漏。 解决方案显而易见:
public void onDestory(){
textView1 = null;
dataList = null;
......
/