java.lang.RuntimeException : Only one Looper may be created per thread

标签 java android multithreading

我有一个简单的线程是这样的:

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

它是主要 Activity 的内部类。 此线程,但是不在主 Activity 上运行,而是在另一个在 Activity 上运行的线程内.

不管怎样,这个例子一模一样here一样,但由于某种原因,它给了我 java.lang.RuntimeException: Only one Looper may be created per thread.

我没有创建任何其他 Looper,至少在任何地方都明确表示。

最佳答案

java.lang.RuntimeException: Only one Looper may be created per thread

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

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

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

         ....
    }

关于java.lang.RuntimeException : Only one Looper may be created per thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038682/

相关文章:

android - 带有输入文本的 float 标签 - 标签在 android 中使用 react native 触及输入的底部边框

java - 如何使用三个不同的线程调用同一方法

java - JOptionPane 输入验证

java - 改造:发送 POST 请求

java - 我们可以结合两种在类型上有很大差异的方法吗?

c# - 静态方法与实例方法,多线程,性能

java - 使用 .wait 和 .notify 进行对象池

java - 无向图的 Dijkstra 最短路径

java - 尝试 findViewById 时抛出 NullpointerException

android - 如何以编程方式禁用/启用 root Android 上的 GPS?