为什么HandlerThread没有得到GCed?

时间:2014-05-20 11:21:38

标签: android android-handler

我有一个场景,我创建并销毁包含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;
}

0 个答案:

没有答案