里面一类矿井我有以下代码:如何/何时收集处理程序垃圾?
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是一个匿名内部类,因此它对封闭对象以及它所指向的对象的整个层次结构具有隐式引用。这看起来像是一个泄漏内存的配方。
顺便说一句,我可以让处理程序停止发送消息(这就是为什么我有if (!paused)
),但这不会使它被GCed,对吧?
那么有没有办法从消息队列中删除处理程序,并让它被GCed?
谢谢,这是最好的答案,切实解决我的问题。但是,如果在创建Handler后无法删除Handler,我仍然认为这是Android的一个设计弱点。 – Roland 2011-02-24 20:18:03