首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止线程onPause

停止线程onPause
EN

Stack Overflow用户
提问于 2012-07-10 15:22:57
回答 3查看 6K关注 0票数 1

当用户离开活动时,我想停止线程。这听起来很简单,但没有一个函数,我试过了,它是有效的。

我用代码开始了这个活动

代码语言:javascript
复制
lovi = new Intent(getApplicationContext(), listoverview.class);
lovi.putExtra("reloadAll", true);
startActivity(lovi);

在列表概述的onCreate中,我使用以下代码启动线程

代码语言:javascript
复制
rlMF.start();

rlMF看起来像这样:

代码语言:javascript
复制
public Thread rlMF = new Thread(new Runnable() {
    public void run() {
        reloadMissingFiles();
    }
});

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-10 15:35:49

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

例如:

代码语言:javascript
复制
volatile boolean activityStopped = false;

创建runnable时:

代码语言:javascript
复制
public Thread rlMF = new Thread(new Runnable() { 

    public void run() {
        while (!activityStopped) {
        // reloadMissingFiles() should check the flag in reality
            reloadMissingFiles(); 
        }
    }
});

在onPause()中:

代码语言:javascript
复制
protected void onPause(){
    super.onPause();
    activityStopped = true;
}
票数 5
EN

Stack Overflow用户

发布于 2012-07-10 15:29:15

使用Android处理程序

代码语言:javascript
复制
Runnable r = new Runnable()
{
    public void run() 
    {
        // do stuff
        handler.post(this);
    }
};

handler.post(r);

在onPause中:

代码语言:javascript
复制
protected void onPause(){
    super.onPause();
    handler.removeCallbacks();
}
票数 0
EN

Stack Overflow用户

发布于 2012-07-10 15:30:05

您可以调用AsyncTaskcancel(boolean mayInterruptIfRunning)方法,而不是尝试使用AsyncTask。您还应该记住,如果使用cancel(true),则捕获可能抛出的InteruptedException

这里是关于ThreadsHandlersAsyncTaska usefull tutorial,可能会对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11408453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档