终止一个线程是不可能的

时间:2014-02-04 19:33:15

标签: android multithreading

我的活动包含以下代码:

Handler dataLoaderHandler = new Handler();
int mInterval = 3000;
public MyActivity myself;
Thread dataLoader = new Thread( new Runnable() {
    @Override 
    public void run() {
        Log.e("MyActivity","ReloadData");
        new DataLoader(new JSONData(myself)).execute(Configuration.dataURL);
        dataLoaderHandler.postDelayed(dataLoader, mInterval);
    }
});

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myself = this;
    ... some other stuff...
    dataLoader.start();
}


... other code ...

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.e("MyActivity","onDestroy ending thread");
    try { dataLoader.join(); } catch(Exception e) { e.printStackTrace(); }
    Log.e("MyActivity","onDestroy called");
}

当我点击后退按钮时,我的活动被破坏,但线程仍然每3秒继续运行一次。为什么线程没有停止或更好地说被删除?

2 个答案:

答案 0 :(得分:1)

因为你没有阻止它。由于已经弃用了对线程调用stop(),因此应该在线程本身内停止该线程。这可以通过调用return来轻松完成。

但是,不要指望你的Thread立刻完成你的后退按钮。 Thread可能会在Android操作系统确定必须执行之前运行(基本上,即使您调用它也可能需要一段时间才能停止)。

您可能想查看我之前发过的that question,答案很清楚。

答案 1 :(得分:1)

尝试:

boolean finished=false;
Handler dataLoaderHandler = new Handler();
int mInterval = 3000;
public MyActivity myself;
Thread dataLoader = new Thread( new Runnable() {
    @Override 
    public void run() {
        if(!finished){
        Log.e("MyActivity","ReloadData");
        new DataLoader(new JSONData(myself)).execute(Configuration.dataURL);
        dataLoaderHandler.postDelayed(dataLoader, mInterval);}
    }
});


@Override
    protected void onStop() {
        super.onStop();
            finished=true;
    }