导致Looper.Loop()挂起的原因(即永不返回)

时间:2013-07-18 15:28:39

标签: android multithreading handler looper

我对某事感到有些困惑。基本上,我正在产生一个线程,另外我想在该线程中运行一个消息循环。我基本上做了以下事情: 这直接来自Android Looper类API文档。但是,我的应用程序总是卡在Looper.loop()中,永远不会从它返回。我目前的解决方法是在主线程(或UI线程)中创建一个处理程序,然后将消息发送到该线程。但是,为了清洁并且只是让我的应用程序的流程变得有意义,我更愿意将我的消息发送到我正在创建的主题。

class LooperThread extends Thread {
      public Handler mHandler;

      public void run() {
          Looper.prepare();

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          Looper.loop();
          // The rest of the code below is a control loop
      }
}

关于什么可能导致Looper.loop()永不返回的想法?

2 个答案:

答案 0 :(得分:7)

Looper.loop会创建一个无限循环,只有在您调用quit

时才会停止

http://developer.android.com/reference/android/os/Looper.html#loop()

答案 1 :(得分:-2)

这可能有用

class LooperThread extends Thread {
      public Handler mHandler;

      public void run() {
          Looper.prepare();
          while(true){
             mHandler = new Handler() {
                public void handleMessage(Message msg) {
                  // process incoming messages here
                }
             };
          }
          // The rest of the code below is a control loop
      }
}