今天在群里和别人唠起来实时搜索的问题,然后想到了handler的内存泄漏,搞一哈。
为什么内存泄露
-
handler的生命周期和activity的不一样
-
相互引用,影响GC回收
解决办法
- 静态内部类
- 外部类
- 弱引用
- onDestroy
private static class MyHandler extends Handler {
private final WeakReference<HandlerActivity2> mActivity;
public MyHandler(HandlerActivity2 activity) {
mActivity = new WeakReference<HandlerActivity2>(activity);
}
@Override
public void handleMessage(Message msg) {
System.out.println(msg);
if (mActivity.get() == null) {
return;
}
mActivity.get().todo();
}
}
@Override
public void onDestroy() {
mHandler.removeMessages(XXX); //等等发送的消息
mHandler.removeCallbacks(mRunnable);
//或者
mHandler.removeCallbacksAndMessages(null);
}
Over 回头望去,嗯......不曾回头
![](https://img.haomeiwen.com/i6777107/b845aeb758f70448.png)
网友评论