博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OkHttp下载文件中途断网报Can't create handler inside thread that has not called Looper.prepare()异常的解决办法...
阅读量:5132 次
发布时间:2019-06-13

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

最近做项目时出现个问题。

在一个基类中,创建一个Handler对象用于主线程向子线程发送数据,代码如下:

this.mThirdHandler = new Handler(){            @Override             public void handleMessage(android.os.Message msg) {                super.handleMessage(msg);                Bundle bundle = msg.getData();                 isStop = bundle.getBoolean(mContext.getText(R.string.str_message_stop).toString());//isStop为基类中的一个私有成员             };         };

但不知道为啥一直报错:Can't create handler inside thread that has not called Looper.prepare()。

搜索后发现,原因是此Handler没有Looper。到哪儿去找Looper呢?自己建?

在代码前加入Looper.prepare();,心想这回可以了吧?

没想到依然报错,错误显示,一个主进程只能有一个Looper,要死了。郁闷中...

突然我想到主进程中肯定有Looper,Context.getMainLooper(),再看Handler的实例化时是可以指定Looper的,太爽了,最后代码如下

this.mThirdHandler = new Handler(mContext.getMainLooper()){            @Override            public void handleMessage(android.os.Message msg) {                super.handleMessage(msg);                Bundle bundle = msg.getData();                isStop = bundle.getBoolean(mContext.getText(R.string.str_message_stop).toString());            };        };

mContext为主界面context,实例化基类时引入的一个参数。

仅供学习参考,如有不足,欢迎指导。

转载于:https://www.cnblogs.com/yegong0214/p/6957630.html

你可能感兴趣的文章
jQuery on(),live(),trigger()
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
【架构】Linux的架构(architecture)
查看>>
ASM 图解
查看>>
Date Picker控件:
查看>>
你的第一个Django程序
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>