Android Handler内存泄漏的修复
发表于|更新于
|阅读量:
Android Handler很容易造成内存泄漏,平时工作时也经常遇到。常见的处理方法如下:
使用弱引用(WeakReference):
创建一个弱引用到你的Activity或Fragment,这样即使Handler还在运行,也不会导致内存泄漏。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import java.lang.ref.WeakReference; public class MyHandler extends Handler { private final WeakReference<ActivityOrFragment> mActivityOrFragment; public MyHandler(ActivityOrFragment activityOrFragment) { mActivityOrFragment = new WeakReference<>(activityOrFragment); } @Override public void handleMessage(Message msg) { ActivityOrFragment activity = mActivityOrFragment.get(); if (activity != null) { } } }
|
在Activity或Fragment销毁时移除消息队列:
确保当Activity或Fragment销毁时,所有的Handler消息都被移除,以防止Handler尝试执行任何操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @Override protected void onDestroy() { super.onDestroy(); mHandler.removeCallbacksAndMessages(null); } 使用HandlerThread:
如果你正在使用后台线程与Handler通信,可以使用HandlerThread,它是一个具有Looper的Thread,可以用来处理后台操作,并且在Activity或Fragment销毁时调用handlerThread.quit()来结束线程。
HandlerThread handlerThread = new HandlerThread("MyHandlerThread"); handlerThread.start(); MyHandler myHandler = new MyHandler(handlerThread.getLooper()); @Override protected void onDestroy() { super.onDestroy(); handlerThread.quit(); }
|