Android : Can't create handler inside thread that has not called Looper.prepare()

简介: 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50195653 又报错了,不过早也习以为常了。
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50195653

又报错了,不过早也习以为常了。

Can't create handler inside thread that has not called Looper.prepare()

我把文档给摘录下来了,大家可以看看。

这个类被用于为线程运行消息循环。默认线程并没有消息循环与之关联,所以你需要创建一个,在线程中调用prepare()以运行这个循环,然后调用loop()在循环结束时获取进程信息。

和消息循环交互最多的就是通过Handler类。

下面是一个实现了Looper线程的典型实例,通过分离的prepare()和loop()方法来创建一个初始的Handler来和Looper交互。

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

从类名来看,Looper就是循环,在这个循环队列中来执行Messages(Runnables),如上所说通常的线程都没有这种循环队列。而且只会执行一次,且在prepare()和loop()中间的方法执行完成后停止。而且这是被Handler管理的,并不会阻塞UI线程。Looper是将一个消息队列(Message Queue)捆绑在线程(Thread)中并管理这个队列。

这里写图片描述

(图片来源于网络)

这张图可以很好的展现出Looper的生命周期,从prepare()开始,到quit()结束。创建Looper的时候也必须调用loop(),图中的无限长的队列MessageQueue就是从loop()开始的。

目录
相关文章
|
3月前
|
安全 Android开发 开发者
【Android开发小技巧】扔掉这坑人的 Handler
【Android开发小技巧】扔掉这坑人的 Handler
40 0
|
8月前
|
Android开发
Android面试常客之Handler全解1
Android面试常客之Handler全解
|
4月前
|
消息中间件 缓存 安全
android开发,使用kotlin学习消息机制Handler
android开发,使用kotlin学习消息机制Handler
78 0
|
8月前
|
XML 消息中间件 API
Android 中handler消息机制的理解
Android 中handler消息机制的理解
46 0
|
8月前
|
XML Android开发 数据格式
Android 中简单计时器的实现方法(Handler和TimerTask)
Android 中简单计时器的实现方法(Handler和TimerTask)
324 0
|
8月前
|
消息中间件 Android开发
Android面试常客之Handler全解2
Android面试常客之Handler全解
|
10月前
|
消息中间件 存储 安全
Android 13 Handler 源码
Handler 是一套 Android 消息传递机制。   在多线程应用场景中,将子线程中需要更新 UI 的操作消息,传递到 UI 主线程,从而实现子线程通知 UI 更新最终实现异步消息处理。说白了是用于线程之间的通信。 Handler主要有4个重要类:Handler、Message、MessageQueue、Looper。
|
11月前
|
Android开发
【Android篇】Handler通信机制(代码版)
通过点击按钮,让子线程1写字符串,传输到Message中,再在子线程1中用主线程的handle对象去发送消息,再让主线程判断是否为子线程1发过来的,再设置为Textview的文字。
60 0
|
12月前
|
调度 Android开发
Android异步消息处理机制之Handler、Looper、Message
因为Android UI线程是线程不安全的,在子线程中更新UI会直接程序崩溃,另外当UI线程需要执行一个比较耗时的操作的话(IO操作,网络通信等),若是执行时间超过5s,程序会直接ANR,为了解决上述问题,可以使用异步消息处理机制[Handler]
|
安全 Android开发 开发者
【Android开发小技巧】扔掉这坑人的 Handler
大家都知道 Handler 特别坑,使用不当会造成各种问题,使用 Kotlin Coroutines + Lifecycle 可以很好地替代 Handler。
680 0