我的活动包含以下代码:
Handler dataLoaderHandler = new Handler();
int mInterval = 3000;
public MyActivity myself;
Thread dataLoader = new Thread( new Runnable() {
@Override
public void run() {
Log.e("MyActivity","ReloadData");
new DataLoader(new JSONData(myself)).execute(Configuration.dataURL);
dataLoaderHandler.postDelayed(dataLoader, mInterval);
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myself = this;
... some other stuff...
dataLoader.start();
}
... other code ...
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("MyActivity","onDestroy ending thread");
try { dataLoader.join(); } catch(Exception e) { e.printStackTrace(); }
Log.e("MyActivity","onDestroy called");
}
当我点击后退按钮时,我的活动被破坏,但线程仍然每3秒继续运行一次。为什么线程没有停止或更好地说被删除?
答案 0 :(得分:1)
因为你没有阻止它。由于已经弃用了对线程调用stop()
,因此应该在线程本身内停止该线程。这可以通过调用return
来轻松完成。
但是,不要指望你的Thread
立刻完成你的后退按钮。 Thread
可能会在Android操作系统确定必须执行之前运行(基本上,即使您调用它也可能需要一段时间才能停止)。
您可能想查看我之前发过的that question,答案很清楚。
答案 1 :(得分:1)
尝试:
boolean finished=false;
Handler dataLoaderHandler = new Handler();
int mInterval = 3000;
public MyActivity myself;
Thread dataLoader = new Thread( new Runnable() {
@Override
public void run() {
if(!finished){
Log.e("MyActivity","ReloadData");
new DataLoader(new JSONData(myself)).execute(Configuration.dataURL);
dataLoaderHandler.postDelayed(dataLoader, mInterval);}
}
});
@Override
protected void onStop() {
super.onStop();
finished=true;
}