如何使用所有线缆正确关闭活动?
我有一个使用多个同步和异步线程的活动,最后以“finish()”结束。但仍然开放,因为一些听众(例如电话)正在倾听。
一个简单的例子是以下代码:
...
test=new Timer();
test.schedule(new TimerTask(){
// @Override
public void run(){
countTime++;
System.out.println("time es -> " + countTime);
}
},1,1000);
...
我制作了一个 MainScreen.this.finish()并且没有直观显示,但是仪表仍在运行。
我怎样才能结束这项活动?
答案 0 :(得分:0)
在cancel()
活动的Timer
上致电onDestroy()
。或者,尽早致电cancel()
Timer
(例如onPause()
)。您对Timer
的使用需要智能地与活动生命周期联系起来。
答案 1 :(得分:0)
您必须使用mThread.join()在活动的onStop()(或onPause())方法中停止该线程。 这看起来像这样:
Thread mThread;
boolean isRunning;
@Override
public void onStop(){
isRunning = false;
try {
mThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
如果要停止很多线程,可以将它们存储在某种列表中并遍历此列表并加入()每个线程。