内存泄漏
1.匿名内部类造成的内存泄漏
匿名内部类会隐士持有外部类的引用,如果在匿名内部类做耗时操作,可能导致外部类不能被回收,从而导致内存泄漏;
比如:
Activity里面的new Runnable类,里面耗时操作sleep,会导致Activity无法被回收;
解决: 使用静态内部类,static class MyRunnable implements Runnable{}
2.handler引发的内存泄漏
handler的postDelay消息,有可能在Activity finish的时候还没有执行,message会持有handler的引用,handler持有Activity的引用,造成内存泄漏
解决:1)Handler中弱引用Activity,如:
WeakReference<MyActivty> weakReference;
public
MyHandler(HandlerActivity activity ){
weakReference =
new
WeakReference<MyActivity>( activity) ;
}
@Override
handleMessage() {
if (weakReference.get() != null) {
// do handle
}
}
2) 需要在onDestory中remove所有的message
handler.removeCallbacksAndMessages(
null
);
3.监听器造成的内存泄漏
单例类设置listener,参数是this(即当前的Activity),
在finish该Activity的时候需要在onDestory中removeListener这个对象
4.TimerTask可能导致内存泄漏
不使用匿名内部类,使用静态内部类的方式
在onDestory中做timerTask.cancel
5.Asynctask可能导致的内存泄漏
不使用匿名内部类,使用静态内部类的方式
在onDestory中调用asyncTask的cancel