1

我想在用户离开活动时停止线程。这听起来很简单,但没有任何功能,我试过了,有效。

我用代码开始活动

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。没有什么能阻止它。

4

3 回答 3

5

你必须添加一些标志来阻止它。通过其他方式停止线程可能会产生可怕的后果,例如资源泄漏。

例如:

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;
}
于 2012-07-10T07:35:49.417 回答
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();
}
于 2012-07-10T07:29:15.307 回答
0

而不是Thread尝试和使用一个AsyncTask,这样你可以调用的cancel(boolean mayInterruptIfRunning)方法AsyncTask。您还应该记住,InteruptedException如果您使用cancel(true).

这是一个关于的有用教程Threads,可能会对您有所帮助。HandlersAsyncTask

于 2012-07-10T07:30:04.560 回答