我想,当用户离开活动来停止一个线程。 这听起来很简单,但没有作用,我试过,效果。
我开始与代码活动
lovi = new Intent(getApplicationContext(), listoverview.class);
lovi.putExtra("reloadAll", true);
startActivity(lovi);
在listoverview的OnCreate我开始与代码的线程
rlMF.start();
而rlMF看起来是这样的:
public Thread rlMF = new Thread(new Runnable() {
public void run() {
reloadMissingFiles();
}
});
我在的onPause试图用rlMF.stop(),.interrupt(),.suspend。 没有什么可以阻止它。
你必须要加一些标记来阻止它。 通过其他方式停止线程可能会产生可怕的后果,如资源泄漏。
例如:
volatile boolean activityStopped = false;
当创建可运行:
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;
}
使用Android处理程序
Runnable r = new Runnable()
{
public void run()
{
// do stuff
handler.post(this);
}
};
handler.post(r);
在的onPause:
protected void onPause(){
super.onPause();
handler.removeCallbacks();
}
取而代之的Thread
尝试和使用AsyncTask
,这样你可以调用cancel(boolean mayInterruptIfRunning)
的方法AsyncTask
。 你也应该记住赶InteruptedException
如果使用可能抛出cancel(true)
。
下面是一个有用的教程约Threads
, Handlers
和AsyncTask
,可以帮助你。