Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
Java Android中结束线程的正确方法_Java_Android_Multithreading - Fatal编程技术网

Java Android中结束线程的正确方法

Java Android中结束线程的正确方法,java,android,multithreading,Java,Android,Multithreading,我有一个worker线程,它与一个处理程序关联。处理程序接收消息s并在worker线程中执行一些操作。我想“停止”我的活动的onPause()中的线程。在我的活动的onPause()方法中,我向我的处理程序发送一条退出消息,这样我的工作线程将脱离Looper.loop()并从运行()返回 这是停止线程的正确方法吗?若否,应如何进行 我看到一些代码示例从主线程调用t1.join(),其中t1是它们的工作线程线程。 join()的目的是什么 在我的示例中,是否需要执行join() 我的工作线程线

我有一个worker
线程
,它与一个
处理程序
关联。
处理程序
接收
消息
s并在worker
线程
中执行一些操作。我想“停止”我的
活动
onPause()
中的
线程。在我的
活动
onPause()
方法中,我向我的
处理程序
发送一条退出消息,这样我的工作线程
将脱离
Looper.loop()
并从
运行()
返回

  • 这是停止
    线程的正确方法吗?若否,应如何进行
  • 我看到一些代码示例从主
    线程调用
    t1.join()
    ,其中t1是它们的工作线程
    线程。
    
    • join()
      的目的是什么
    • 在我的示例中,是否需要执行
      join()
  • 我的工作线程
    线程

    class WorkerThread extends Thread {
        private static final int QUIT = -1;
        public Handler mHandler;
    
        public void run() {
            Looper.prepare();
    
            mHandler = new Handler() {
                public void handleMessage(Message msg) {
                    // do stuff
    
                    if(msg.what == QUIT){
                        Looper.myLooper().quit();
                    }
    
                    // do stuff
                }
            };
    
            Looper.loop();
        }
    }
    

    我没有在android上工作过,但在java中,线程可以通过以下方式停止-

  • 使用易失性布尔标志-在循环中使用此标志(while(标志))。它会一直运行直到旗子为真。如果要停止线程,请将标志设置为false

  • 检查中断标志-在thread类中有一个静态布尔方法thread.interrupted(),用于检查中断标志。您可以通过调用thread.interrupt()来中断正在等待的线程

  • Join()方法-Join方法使当前线程等待线程死亡。当您有一些逻辑只有在线程完成其执行后才能执行时,就可以使用这种方法。因此,您不能使用join停止线程,而是让线程等待另一个线程完成

    希望能有帮助。谢谢