当我们在Activity或者Service需要执行一些比较耗时的任务时,就会想到使用子线程Thread。这时候就是特别注意了,我们finish Activity或Service的时候就要先把线程停掉,否则系统是无法调用Activity或Service的onDestroy方法的。
很多人可能会想到使用stop方法来停止,我们看java文档就知道这个方法已经被遗弃了,即使你调用了也是没有用的,也达不到停止线程的目的。解决办法之一就是在Thread的run方法设置标志位,
@Override
public void run() {
super.run();
while (!stop) {
//do something
}
}
在Activity里的onPause或Service里面的onUnbind(或onDestroy,具体情况具体分析),设置标志为true,如:
protected void onPause() {
stop= true;
super.onPause();
}