我有一个问题。 最近我为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类)都被正确地垃圾收集了?
提前感谢。
答案 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,它将被终止(当然,这不是"必要且充分的条件"。)