This Handler class should be sta
2020-05-16 本文已影响0人
dap2erp
handler lead 的分析和解决
[TOC]
现象及分析
在 Activity 中直接 new 一个普通 Handler 的时候会提示 This Handler class should be static or leaks might occur
。
原因是普通的内部类会持有外部类的引用,从而导致 Activity 无法被回收的问题。所有才会提示 Handler should be static。
解决方案
在工具类中定义 static Handler 内部类,类内部使用 WeakReference 存储 acitivity 实现的 MyHandlerCallback 接口,保证能及时释放。
工具类:Util.java
public interface MyHandlerCallback {
public void onHanlderCallback(Message msg);
}
public static class MyHandler extends Handler {
private final WeakReference<MyHandlerCallback> mCallback;
public MyHandler(MyHandlerCallback callback) {
mCallback = new WeakReference<>(callback);
}
@Override
public void handleMessage(Message msg) {
mCallback.get().onHanlderCallback(msg);
}
}
Activity 中使用,需要实现 MyHandlerCallback 接口
private MyHandler mHandler = new MyHandler(this);
@Override
public void onHanlderCallback(Message msg) {
switch (msg.what) {
case MSG_DATA_LOADED:
setAdapter();
break;
default:
Log.e(TAG, msg + " can not be recognize");
}
}