博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android : Can't create handler inside thread that has not called Looper.prepare()
阅读量:5943 次
发布时间:2019-06-19

本文共 1021 字,大约阅读时间需要 3 分钟。

版权声明:转载请联系本人,感谢配合!本站地址: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()开始的。

你可能感兴趣的文章
innerHTML outerHTML innerText
查看>>
kafka安装教程
查看>>
go语言基础
查看>>
【Windows】字符串处理
查看>>
Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
查看>>
CentOS使用chkconfig增加开机服务提示service xxx does not support chkconfig的问题解决
查看>>
微服务+:服务契约治理
查看>>
save
查看>>
Android DrawLayout + ListView 的使用(一)
查看>>
clear session on close of browser jsp
查看>>
asp.net mvc Post上传文件大小限制 (转载)
查看>>
关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法
查看>>
mysql出现unblock with 'mysqladmin flush-hosts'
查看>>
oracle exp/imp命令详解
查看>>
开发安全的 API 所需要核对的清单
查看>>
Mycat源码中的单例模式
查看>>
WPF Dispatcher介绍
查看>>
fiddler展示serverIP方法
查看>>
C语言中的随意跳转
查看>>
WPF中如何将ListViewItem双击事件绑定到Command
查看>>