将 Handler 声明成静态内部类
静态类不持有外部类的对象,所以 Activity 可以被正常的回收。但这个时候 Handler 无法操作 Activity 中的对象了,所以这个时候需要增加一个对 Activity 弱引用。代码如下:
static class MyHandler extends Handler {
private WeakReference<Activity> reference;
public MyHandler(Activity activity) {
// 持有 Activity 的弱引用
reference = new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
Activity activity = reference.get();
if (activity != null && !activity.isFinishing()) {
switch (msg.what) {
// 处理消息
}
}
}
}