【发布时间】:2016-04-23 09:23:31
【问题描述】:
我的活动代码如下
Handler handler = new Handler(){
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
}
};
Android Studio lint:
处理程序引用泄漏
由于这个 Handler 被声明为一个内部类,它可能会阻止外部类被垃圾回收。 如果 Handler 在主线程以外的线程使用 Looper 或 MessageQueue,则没有问题。 如果 Handler 使用主线程的 Looper 或 MessageQueue,则需要修复Handler声明,如下:将Handler声明为静态类;在外部类中,实例化一个WeakReference给外部类,在你实例化Handler的时候把这个对象传给你的Handler;使用 WeakReference 对象对外部类的成员进行所有引用。
我知道 Handler 引用泄漏是因为它持有 Activity 的强引用,而 Activity 不能被垃圾回收器回收,但是为什么 Handler 泄漏问题不会发生在主线程以外的线程中呢?主线程生命周期与应用程序一样长?
【问题讨论】:
-
你发现了吗?因为三年后我也有同样的问题。
标签: android