我有一个场景,我创建并销毁包含HandlerThread继承的静态内部类的类的对象。创建对象时,线程和循环器启动,当对象被销毁时,它退出线程并等待它完成。
我的问题是,即使m_myThread.getLooper()返回null并且Thread处于TERMINATED状态,我的myThread对象也不会被垃圾收集。
class myThread extends HandlerThread{
...
}
感谢您的任何见解...
编辑:这是代码 我有两个按钮。一个调用startThread(),另一个调用stopThread()。完成这几次后,我可以看到文件描述符计数已经增加。但是,如果我评论mDialog.show();
,这不会发生private void startThread(){
mDialog = new Dialog(mContext);
mHandlerThread = new HandlerThread("mythread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper(), MainActivity.this);
mHandler.sendEmptyMessage(1);
mHandler.sendEmptyMessageDelayed(2, 1000);
}
private void stopThread(){
mHandlerThread.quit();
try {
mHandlerThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandlerThread = null;
mDialog = null;
}
@Override
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case 1:
mDialog.setTitle("alert dialog test");
mDialog.show();
break;
case 2:
mDialog.dismiss();
break;
}
return false;
}