1、Handler内存泄露问题
产生内存泄露原因:静态内部类持有外部类的匿名使用,导致在用户退出当前Activity时,handler内部的一些耗时操作还在运行,从而导致activity还被handler做引用,最终导致activity还存留在堆栈中,没有被回收,导致内存泄露。
解决:1.handler内部持有外部activity的弱引用。
2.把handler改为静态内部类。
3.在activity的onDestory方法内掉用mHandler.removeCallBack()。
(只能90%的解决)
private MyHandler mMyHandler = new MyHandler(this);
private static class MyHandler extends Handler{
// SoftReference<Activity> 也可以使用软应用 只有在内存不足的时候才会被回收
private final WeakReference<Activity> mActivity;
private MyHandler(Activity activity) {
mActivity = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
Activity activity = mActivity.get();
if (activity != null){
//做操作
}
super.handleMessage(msg);
}
}
private static final Runnable sRunnable = new Runnable() {
@Override
public void run() {
//做操作
}
};