0

我想在一段时间循环中从网络获取一些数据,直到用户单击屏幕上的按钮,然后停止接收数据并显示另一个活动。我收到的内容如下:

Thread listUpdater;

...

listUpdater = new Thread() {
    @Override
    public void run() {
        TimerTask task = new UpdateListTask();

        while (true) {
            task.run();
        }
    }
};
listUpdater.start();

...

public class UpdateListTask extends TimerTask {

     public UpdateListTask() {
     }

     @Override
     public void run() { 
        // get some data from network (asynchronically)
     }
}

用户单击按钮后,我将运行以下代码:

try {
    listUpdater.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

但它不会停止新线程/计时器任务中的运行循环,所有代码仍在运行——这是我不想要的。我能做些什么来停止正在运行的代码?有没有办法停止线程?或者我可以做一些线程间布尔变量设置来停止while循环吗?

我尝试了一切,但没有成功。有人可以帮忙吗?

4

1 回答 1

1

.join 等待线程完成。你的线程永远不会结束,所以一切都会中断。

实际停止线程的一种简单方法是:

volatile boolean updateList;
Thread listUpdater;

...

listUpdater = new Thread() {
    @Override
    public void run() {
        TimerTask task = new UpdateListTask();

        while (updateList) {
            task.run();
        }
    }
};
updateList = true;
listUpdater.start();

try {
    updateList = false;
    listUpdater.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

这样,您可以使用布尔变量作为标志来控制 listUpdater 线程的执行。每次要重新启动线程时,请记住将其设置回 true。

于 2013-01-27T23:20:20.473 回答