【问题标题】:Android: Only one Looper may be created per threadAndroid:每个线程只能创建一个 Looper
【发布时间】:2011-04-22 17:52:59
【问题描述】:

我在使用 Android Looper 时遇到问题。我有一个扩展了 AsynTask 的类。在 doInBackground() 方法中,我有 Looper.prepare() 和下面的一些代码。

第一次运行良好,但之后出现异常 "每个线程只能创建一个 Looper"。

似乎有一些使用 Looper.quit() 的解决方案,但我无法实现它。

任何帮助将不胜感激。

【问题讨论】:

  • 在我看来 Looper.quit() 确实是你需要的。在android API文档中,明确说明“调用此方法后一定要调用loop(),并通过调用quit()结束”。
  • “我无法实现它”是什么意思?
  • 我的意思是我无法在 Looper 中找到 quit()。它显示 getMainLooper、myLooper()、loop()、myQueue()、prepare()、prepareMainLooper() 但不显示 quit()。

标签: android looper


【解决方案1】:

只需添加以下检查。

 if (Looper.myLooper() == null)
     Looper.prepare();
【解决方案2】:
getActivity().runOnUiThread (new Thread(new Runnable() { 
    public void run() {
        Looper.myLooper();
        getActivity().invalidateOptionsMenu();
    }
}));

【讨论】:

    【解决方案3】:
    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();
          }
      }
    

    【讨论】:

      【解决方案4】:

      试试……

      Looper.getMainLooper().quit();
      

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 2012-01-16
        • 2014-05-27
        • 2019-05-05
        • 1970-01-01
        • 2019-01-22
        • 2011-12-08
        • 2014-10-03
        • 2016-10-07
        相关资源
        最近更新 更多