【问题标题】:How to stop threads and handlers in Android如何在 Android 中停止线程和处理程序
【发布时间】:2017-01-17 16:47:47
【问题描述】:

老实说,我想不通 - 我听说 thread.stop() 不是一个好东西。它也不适合我。如何让线程/处理程序停止运行?

【问题讨论】:

标签: android handler


【解决方案1】:

线程应该以“礼貌”的方式终止。你应该建立一些机制让你的线程停止。您可以在线程的每个循环上检查一个 volatile 布尔参数(假设您在那里有循环),如下所示:

while (!threadStop) {
    // Do stuff
}

然后您可以从另一个线程将布尔值设置为 false(但请确保您处理所有同步问题)并且您的线程将在下一次迭代中停止。

【讨论】:

    【解决方案2】:

    好的,停止线程的答案已经完成。要停止处理程序,您必须使用以下方法:

    removeCallbacksAndMessages from Handler class这样的

    myHandler.removeCallbacksAndMessages(null);
    

    【讨论】:

    • 这应该是选择的答案,只是一些信息。在使用上述方法之前检查您的处理程序是否不为空。
    【解决方案3】:

    你可以这样使用它..

    Thread mythread=new Thread();
    
    if(!mythread){
        Thread dummy=mythread;
        mythread=null;
        dummy.interrupt();
    }
    

    或 你可以使用

    mythread.setDeamon(true);
    

    【讨论】:

    • 这是什么语言? if (!mythread) 在 Java 中不起作用。
    【解决方案4】:

    停止处理程序的正确方法是: handler.getLooper().quit();
    我通常通过向自行终止的处理程序发送退出消息来实现这一点。

    停止泛型线程的正确方法是: thread.interrupt();
    正在停止的线程需要处理中断:

    if(isInterrupted())
        return;
    

    如果你愿意,这可以放在一个循环中:

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    try {
        while(!isInterrupted() && (line = br.readLine()) != null) {
            // Do stuff with the line
        }
    }
    catch(IOException e) {
        // Handle IOException
    }
    catch(InterruptedException e) {
        // Someone called interrupt on the thread
        return;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 2013-01-11
      • 2013-04-03
      • 2023-03-10
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多