我希望在一个while循环中从网络获取一些数据,直到用户点击屏幕上的按钮,然后停止接收数据并显示另一个活动。我收到的内容如下:
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循环吗?
我尝试了一切,但没有成功。有人可以帮忙吗?
答案 0 :(得分: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。