停止线程Runnable不可能

时间:2017-11-17 16:28:00

标签: android multithreading runnable

我有这个帖子:

myThread = new Thread(new Runnable() {
                    public void run() {

                        ServerSocket ss = null;

                        while (!end) {

                            final String incomingMsg;
                            try {
                                ss = new ServerSocket(2201);
                                ss.setSoTimeout(15000);
.. some code ...
    }
                });
                myThread.start();

现在我需要通过按钮停止此操作,但没有任何工作,我尝试使用一些代码:

Handler handler= new Handler();
handler.removeCallbacks(myThread);
myThread.interrupt();

但是线程没有停止=(

3 个答案:

答案 0 :(得分:1)

你不能。 Android会在需要时自动停止线程。

你可以做的就是停止执行run()方法中的代码,使用boolean或其他东西

答案 1 :(得分:0)

接受的答案不正确。 Android无法管理您启动的线程,但是您启动它们。

从技术上讲,线程不能被停止"。他们可以打断。中断线程只意味着设置了一个标志,您在线程的实现中需要考虑并退出run()方法。例如,

  Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
      while (!Thread.currentThread().isInterrupted()) {
        // Do stuff
      }
    }
  });

然后,您可以稍后致电t.interrupt()至"停止"你的主题。

如果忽略线程实现中的中断标志,则线程永远不会停止。例如,如果您使用// Do stuff替换上面的SystemClock.sleep(Integer.MAX_VALUE),则线程将永远不会退出,无论它是否被中断。

SDK中实现的许多IO操作也会关注中断标志,这就是为什么你可以中断参与阻塞IO的线程的原因。请参阅InterruptedException

答案 2 :(得分:0)

您可以使用.stop(),但这是非常糟糕的做法,它可能会给您带来一些麻烦。尝试在.run()中添加一些布尔值(如向导说)