停止线程onPause

时间:2012-07-10 07:22:57

标签: android android-intent

我想在用户离开活动时停止线程。这听起来很简单但没有功能,我试过,它可以工作。

我使用代码启动活动

lovi = new Intent(getApplicationContext(), listoverview.class);
lovi.putExtra("reloadAll", true);
startActivity(lovi);

在listoverview的onCreate中,我使用代码

启动Thread
rlMF.start();

rlMF看起来像这样:

public Thread rlMF = new Thread(new Runnable() {
    public void run() {
        reloadMissingFiles();
    }
});

我在onPause中尝试使用rlMF.stop(),. interrupt(),. suspend。没有什么能阻止它。

3 个答案:

答案 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)ThreadsHandlers的{​​{3}},可能对您有帮助。