Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';使用睡眠计时器和TimerTask在Android中停止线程_Android_Multithreading_Networking - Fatal编程技术网

Can';使用睡眠计时器和TimerTask在Android中停止线程

Can';使用睡眠计时器和TimerTask在Android中停止线程,android,multithreading,networking,Android,Multithreading,Networking,我想在while循环中从网络获取一些数据,直到用户单击屏幕上的按钮,然后停止接收数据并显示另一个活动。我所做的接收工作如下: Thread listUpdater; 用户单击按钮后,我运行以下代码: try { listUpdater.join(); } catch (InterruptedException e) { e.printStackTrace(); } 但它并没有停止新线程/计时器任务中的运行循环,所有代码仍在运行——这是我不想要的。我能做些什么来停止代码的运

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

Thread listUpdater;

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

try {
    listUpdater.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}
但它并没有停止新线程/计时器任务中的运行循环,所有代码仍在运行——这是我不想要的。我能做些什么来停止代码的运行?有没有办法停止线程?或者我可以做一些线程间布尔变量设置来停止while循环吗


我什么都试过了,但没有成功。有人可以帮忙吗?

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

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

volatile boolean updateList;
Thread listUpdater;


通过这种方式,可以将布尔变量用作控制listUpdater线程执行的标志。记得每次要重新启动线程时都要将其设置为true。

谢谢,伙计,我不知道为什么,但这次它工作得很好!:)
try {
    listUpdater.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}
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();
}