Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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
Android 停止线程运行是不可能的_Android_Multithreading_Runnable - Fatal编程技术网

Android 停止线程运行是不可能的

Android 停止线程运行是不可能的,android,multithreading,runnable,Android,Multithreading,Runnable,我有一条线索: myThread = new Thread(new Runnable() { public void run() { ServerSocket ss = null; while (!end) { final String incomingMsg;

我有一条线索:

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();

但线程不停止=(

您不能。Android将在需要时自动停止线程


你所能做的就是停止执行
run()
方法中的代码,使用
boolean
或其他方法,接受的答案是不正确的。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

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

myThread.stop();不起作用???.stop过时了,不起作用=(为什么不更改'end'变量的值?end=true;好主意,谢谢,但我也想看看是否有不同的方法。这个答案不正确。Android不管理您启动的线程,但是您启动它们。有关详细信息,请参阅我的答案..stop不推荐=)我的错。我没有使用过。stop()相当多的时间。祝你好运找到有效的解决方案。