【发布时间】:2011-07-03 05:20:20
【问题描述】:
在我的一个类中,我有以下代码:
mHandler = createHandler();
private Handler createHandler() {
return new Handler() {
public void handleMessage (Message msg) {
update();
if (!paused) {
sendEmptyMessageDelayed(0, 300);
}
}
};
}
文档说:
http://developer.android.com/reference/android/os/Handler.html
每个 Handler 实例都与单个线程和该线程的消息队列相关联
所以如果我理解正确,只要应用程序线程正在运行,处理程序就不会被垃圾收集,对吗?
在我的具体示例中,由于 Handler 是一个匿名内部类,它具有对封闭对象的隐式引用以及它所指向的对象的整个层次结构。这在我看来就像是内存泄漏的秘诀。
顺便说一句,我可以让处理程序停止发送消息(这就是为什么我有 if (!paused))但这不会让它被 GCed,对吧?
那么有没有办法从消息队列中移除 Handler 并让它被 GCed 呢?
【问题讨论】:
标签: android