以编程方式取消Android线程

3

我有这个线程:

                    t = new Thread() {
                    @Override
                    public void run() {
                        try {
                            while (!isInterrupted()) {
                                Thread.sleep(1);
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        TimeCounter++;
                                        textview.setText("Your reaction time:"
                                                + TimeCounter + "MS");
                                    }
                                });
                            }
                        } catch (InterruptedException e) {
                        }
                    }
                };

                t.start();

我想取消它,我尝试了t.interrupt();,但没有起作用,还有其他的方法吗?


也许你可以看一下这个?http://stackoverflow.com/questions/9595603/stop-thread-in-android-app - user3289157
Thread.sleep(1) 是所有中最有趣的。 - Nabin
3个回答

0

我之前也遇到过类似的问题。你可能会发现这个链接很有用,因为这就是我解决这个问题的方法。另外,正如已经提到的那样,你将线程设置为睡眠1毫秒是相当奇怪的。 线程未被正确移除


我只想每毫秒更新一次TextView,所以我使用了线程和sleep一毫秒,还有其他方法吗? - David
哦,好的,我明白了。个人而言,我会使用类似于 CountDownTimer 的东西。它允许您明确指定间隔。 - Programmer
这可能会帮助您了解如何在代码中正确使用它。如何制作倒计时器 - Programmer
我真诚地认为,这比使用线程更好(尽管我不知道您的程序的确切上下文)。您可以让onTick()处理更新TextView,这将根据您的间隔发生。此外,我相信CountDownTimer在其自己的线程上运行(我可能错了)。 - Programmer
你说得没错,但我需要它在未知的时间内运行,所以我不能使用CountDownTimer,因为他可能会提前结束。不过,我已经解决了这个问题,谢谢! - David

0
你的问题可能是它正常工作,但你有很多runOnUiThread命令待处理。频繁地执行runOnUiThread并不推荐,因为这会导致大量的处理和线程间通信。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接