我想在用户离开活动时停止线程。这听起来很简单但没有功能,我试过,它可以工作。
我使用代码启动活动
lovi = new Intent(getApplicationContext(), listoverview.class);
lovi.putExtra("reloadAll", true);
startActivity(lovi);
在listoverview的onCreate中,我使用代码
启动ThreadrlMF.start();
rlMF看起来像这样:
public Thread rlMF = new Thread(new Runnable() {
public void run() {
reloadMissingFiles();
}
});
我在onPause中尝试使用rlMF.stop(),. interrupt(),. suspend。没有什么能阻止它。
答案 0 :(得分:5)
你必须添加一些标志来阻止它。通过其他方式停止线程可能会产生可怕的后果,比如资源泄漏。
例如:
volatile boolean activityStopped = false;
创建runnable时:
public Thread rlMF = new Thread(new Runnable() {
public void run() {
while (!activityStopped) {
// reloadMissingFiles() should check the flag in reality
reloadMissingFiles();
}
}
});
在onPause()中:
protected void onPause(){
super.onPause();
activityStopped = true;
}
答案 1 :(得分:0)
使用Android处理程序
Runnable r = new Runnable()
{
public void run()
{
// do stuff
handler.post(this);
}
};
handler.post(r);
在onPause中:
protected void onPause(){
super.onPause();
handler.removeCallbacks();
}
答案 2 :(得分:0)
而不是Thread
尝试使用AsyncTask
,这样您就可以调用cancel(boolean mayInterruptIfRunning)
的{{1}}方法。您还应该记住,如果您使用AsyncTask
,请抓住可能引发的InteruptedException
。
以下是关于cancel(true)
,Threads
和Handlers
的{{3}},可能对您有帮助。