【问题标题】:Proper way to end a thread in Android在Android中结束线程的正确方法
【发布时间】:2016-04-30 17:10:09
【问题描述】:

我有一个工作人员 Thread 与一个 Handler 关联。 Handler 接收Messages 并在worker Thread 中执行一些操作。我想在我的Activity 的onPause() 中“停止”Thread。在我的Activity 的onPause() 方法中,我向我的Handler 发送退出消息,以便我的工人Thread 将突破Looper.loop() 并从run() 返回。

  1. 这是停止Thread 的正确方法吗?如果没有,应该怎么做?
  2. 我已经看到从主Thread 调用t1.join() 的代码示例,其中t1 是他们的工人Thread。
    • join() 的目的是什么?
    • 在我的示例中是否需要 join()?

我的工人Thread:

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

【问题讨论】:

    标签: java android multithreading


    【解决方案1】:

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

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

    2. 检查中断标志 - 您在线程类中有静态布尔方法作为 Thread.interrupted() 检查中断标志。您可以通过调用 Thread.interrupt() 来中断等待的线程。

    Join() 方法 - Join 方法使当前线程等待线程死亡。这用于当您有一些逻辑仅在线程完成执行后才执行的情况。所以你不能使用join来停止一个线程,而是让一个线程等待另一个线程完成。

    希望对您有所帮助。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多