Android 使用来自UI的消息在循环时中断线程

Android 使用来自UI的消息在循环时中断线程,android,multithreading,messaging,looper,Android,Multithreading,Messaging,Looper,我确信我的问题的解决方案会是一个“无聊”的时刻,但我被困在这里,所以任何有用的提示都会被感激地接受 问题:我有一个带有后台线程的UI。UI有一个启动/停止按钮,用于启动然后停止线程中的进程。这是通过使用从UI到封装在循环器中的线程中的消息处理程序的消息来实现的。线程进程处于while循环中,该循环依赖于线程消息处理程序设置的布尔值true/false。但是,一旦启动,就不会再处理任何消息,循环将无限期地继续 private class MyThread extends Thread{ p

我确信我的问题的解决方案会是一个“无聊”的时刻,但我被困在这里,所以任何有用的提示都会被感激地接受

问题:我有一个带有后台线程的UI。UI有一个启动/停止按钮,用于启动然后停止线程中的进程。这是通过使用从UI到封装在循环器中的线程中的消息处理程序的消息来实现的。线程进程处于while循环中,该循环依赖于线程消息处理程序设置的布尔值true/false。但是,一旦启动,就不会再处理任何消息,循环将无限期地继续

private class MyThread extends Thread{
    public void run() {
      Looper.prepare();
          MyThreadChildHandler = new Handler() {
              public void handleMessage(Message msg) {
                  switch(msg.arg1) {
                 case START:
                          boolLoop = true;
                          doWhileLoop();
                     case STOP:
                          boolLoop = false;
                     }
          };
      Looper.loop();
    }

    private void doWhileLoop(){
        while (boolLoop = true){
            stuff.do
        }
        finish.do
    }

}
我在UI的停止消息上得到了一条logcat消息,该消息正在触发,但线程从未接收到它,因为它卡在while循环中,消息处理程序无法查看它

有没有一种方法可以让线程处理程序在不同点检查while循环中的消息?或者有没有另一种方法可以让基于线程的连续while循环根据来自UI的消息启动和停止

干杯 安迪改变:

  while (boolLoop = true){
            stuff.do
        }
致:

或者更喜欢

  while (booloop){
          stuff.do
        }
您需要检查等式(=)而不是赋值(=)

另外一件事是你不需要一个活套对象。用while循环控制它。我会这样做:


我会让线程无限期地执行它的进程,直到它超时或来自控制该线程的处理程序的消息通过两个类(如Activity和thread)之间共享的标志变量停止该线程的执行。其中活动的状态控制线程。例如,假设应用程序进入后台,这时您会将running标志设置为false,这样它就会停止。不需要执行
活套
。消息的传递方式也是通过一个处理程序。

这是一个很好的建议,但我不确定它是否会起作用。我认为OP真正的问题是,
handleMessage
永远不会从
START
消息返回,因此循环器永远不会处理下一条消息。感谢超级快速响应的家伙。JoxTraex,=vs==只是缩写我的代码时的一个输入错误。我试图避免使用全局变量来提供UI/线程控制,而是使用消息传递。但是,这让我陷入了目前的困境。可能不需要使用活套,因为我不需要排队等待很多消息,但我仍然需要一种方法来根据UI中的消息中断while循环。它不是一个真正的兔子洞,但从你接近它的方式来看,它是一个兔子洞。我的方法解决了这个问题,而绕过一个全局变量实际上是不可能的。或者另一种方法是有方法地使用活动和服务,并通过绑定使活动控制该服务。他们可以直接互相传递信息。泰德·霍普,是的,这就是问题所在。我想继续做一些事情,直到用户界面发出停止请求。然后Finish.do并最终退出子doWhileLoop()。线程卡在while循环中,从不处理传入消息。你能想出一个不同的方法来达到我的目的吗。助教。
  while (booloop){
          stuff.do
        }