如何在Android系统中正确终止线程?

时间:2014-07-11 07:22:52

标签: android multithreading terminate

我有一个问题。 最近我为Android开发了简单的“日志系统”。 有一个单例类,其名称为“Logger”。

protected Logger(){
....
_logHandler = new LogHandler(_logQueue);
_logHandler.start();
.... 
}
public static Logger getInstance(){
    ...
}

在“Logger”中,一个线程正在运行,如下所示。

@Override
public void run() {
   try{
        while (isAlive){
            execute();                     
            synchronized (lock) {
                try {
                    while (isPaused) {
                        lock.wait();
                    }
                }catch (InterruptedException e){
                    e.printStackTrace();
                }finally {
                    shutDown();
                }
            }
        }
    }catch(InterruptedException e){
        e.printStackTrace();
    }finally {
        shutDown();
    }
}
public void requestShutDown(){
    isAlive = false;
    interrupt();
}

我想要的是当应用程序终止时,我想调用“requestShutDown()”方法来停止上面的线程。 但我找不到合适的时机。

所以,我必须这样做 当在Activity中执行onPause()方法时,调用requestShutDown()。在Activity中执行onResume()方法,再次调用thread.start()?

还有其他方法吗?

或者当应用程序终止时,应用程序中的所有资源(包括上面的线程,Logger类)都被正确地垃圾收集了?

提前感谢。

2 个答案:

答案 0 :(得分:0)

你可以创建像:

这样的线程
Thread  th;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
th = new Thread(new Runnable() {
@Override
public void run() {
//do your stuff             
}
});
th.run()           //to start thread
}


public void requestShutDown(){
 if(th.isAlive())
{
th.yield();        //to close thread
}
}

答案 1 :(得分:0)

@dwnz谢谢!! 最后,我打电话给" onDestory()" MainActivity中的方法。在onDestory()中,如果Activity的isFinishing()为true,它将被终止(当然,这不是"必要且充分的条件"。)