停止线程的onPause(Stop Thread onPause)

2019-06-26 04:25发布

我想,当用户离开活动来停止一个线程。 这听起来很简单,但没有作用,我试过,效果。

我开始与代码活动

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

Answer 1:

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

例如:

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;
}


Answer 2:

使用Android处理程序

Runnable r = new Runnable()
{
    public void run() 
    {
        // do stuff
        handler.post(this);
    }
};

handler.post(r);

在的onPause:

protected void onPause(){
    super.onPause();
    handler.removeCallbacks();
}


Answer 3:

取而代之的Thread尝试和使用AsyncTask ,这样你可以调用cancel(boolean mayInterruptIfRunning)的方法AsyncTask 。 你也应该记住赶InteruptedException如果使用可能抛出cancel(true)

下面是一个有用的教程约ThreadsHandlersAsyncTask ,可以帮助你。



文章来源: Stop Thread onPause