如何在android中杀死一个线程?

时间:2013-05-20 16:17:44

标签: java android multithreading

我的应用程序中运行了后台线程,我需要安全地终止它。除了使用布尔标志之外,我怎样才能杀死java中的线程?我已经读过我不能再使用thread.stop(),因为它不安全。但是有没有正确的方法呢?有人可以给我一个代码片段吗?

由于

3 个答案:

答案 0 :(得分:8)

它在任何语言中永远不会安全地杀死一个线程 - 你不知道该线程可能正在做什么以及它可能留下什么样的状态。使用带有线程的cancel方法偶尔检查isCanceled允许线程管理它自己的安全性 - 只有当它自行杀死或进行所需的清理时才可以选择这样做。

如果你实际上不需要杀死一个线程但只想等到它结束,请使用join。

如果你绝对需要杀死一个线程,请继续使用stop。只是不要指望你的状态在之后是安全的或一致的 - 这应该只在终止应用程序/活动时才能完成。

答案 1 :(得分:5)

尝试使用类似

的内容
service.getThread().interrupt();
service.setThread(null);

thread.interrupt();
thread = null;

答案 2 :(得分:0)

你需要使用旗帜。例如:

private boolean isThOn; //flag isThOn
long delaytime;
int times;
...
new Thread() {
        public void run() {
            int i=0;
            isThOn = true;
            while (isThOn && i<times) {
                try {
                    i++;
                    //{...}
                    if (i == times) isThOn = false;
                    sleep(delaytime);
                } catch (Exception e) {e.printStackTrace();}
            }
        }
}.start();
public void cancelthd() {
    isThOn = false; //whileloop will stop if isThOn = false -> Thread will Terminated befor i = times.
}