java.lang.RuntimeException:每个线程只能创建一个Looper

我有一个简单的线程,如下所示:

public class AwesomeRunnable extends Thread { Handler thisHandler = null; Handler uihandler = null; String update = null; long time = 0; public AwesomeRunnable(Handler h, long howLong) { uihandler = h; time = howLong; } public void run() { Looper.prepare(); thisHandler = new Handler(); ... 

编辑:新的代码,启动了RUNNABLE

 public class StartCycle implements Runnable { @Override public void run() { pomodoroLeft = numPomodoro; while(pomodoroLeft > 0) { pomodoroLeft--; actualSeconds = 6 * ONE_SECOND; runnable = new AwesomeRunnable(myHandler, actualSeconds); runnable.start(); waitForClock(); 

它是主要活动的内在阶级。 但是, 此线程 不在主活动运行,而是在活动上运行另一个线程运行

无论如何,这个例子与这里 完全相同 ,但由于某种原因它给了我java.lang.RuntimeException:每个线程只能创建一个Looper。

我没有创建任何其他的loopers,至少在任何地方都没有。

  • 我应该在`throw new InterruptedIOException()`之前执行`Thread.currentThread()。interrupt()`吗?
  • 在等待退出信号时处理InterruptedException(Android中的错误)
  • Android检查WIFI状态(断开或用户更改WIFI)如何标记?
  • 在IntentService和AsyncTask(Android)之间使用共享代码时,领域从不正确的线程访问错误
  • 带有Facebook登录示例的java.lang.RuntimeException
  • java.lang.RuntimeException:每个线程只能创build一个Looper
  • Android并发使用
  • 应用程序线程与服务线程
  • java.lang.RuntimeException:每个线程只能创建一个Looper

    抛出exception是因为您(或核心Android代码)已经为当前正在执行的线程调用了Looper.prepare()

    下面检查当前线程是否已经存在Looper,如果没有,则创建一个,从而避免RuntimeException

      public void run() { if (Looper.myLooper() == null) { Looper.prepare(); } thisHandler = new Handler(); .... } 

    Looper.prepare();只是调用Looper.prepare(); ,首先检查你的Thread是否已经存在Looper ,如果没有,则调用该函数。 喜欢这个:

     if (Looper.myLooper()==null) Looper.prepare();