java.lang.RuntimeException:每个线程只能创建一个循环器

2022-09-01 10:08:26

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

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();
  ...

编辑:添加了启动可运行状态的代码

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。

我没有创建任何其他循环器,至少在任何地方都明确地创建。


答案 1

java.lang.RuntimeException:每个线程只能创建一个循环器

之所以引发异常,是因为您(或核心 Android 代码)已调用当前执行线程。Looper.prepare()

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

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

         ....
    }

答案 2

而不是仅仅调用 ,首先检查 是否不存在,如果不存在,请调用该函数。喜欢这个:Looper.prepare();LooperThread

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

推荐