java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
在线程当中使用toast的时候跳出的错误:
(1) Looper类别用来为一个线程开启一个消息循环。默认情况下Android中新诞生的线程是没有开启消息循环的。
(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环)
Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。
(2) 通常是通过Handler对象来与Looper交互的。Handler可看做是Looper的一个接口,用来向指定的Looper发送消息及定义处理方法。
默认情况下Handler会与其被定义时所在线程的Looper绑定,比如,在主线程中定义,其是与主线程的Looper绑定。
mainHandler = new Handler() 等价于new Handler(Looper.myLooper()).
Looper.myLooper():Return the Looper object associated with the current thread 获取当前进程的looper对象。
还有一个类似的 Looper.getMainLooper() 用于获取主线程的Looper对象。
(3) 在非主线程中直接new Handler() 会报如下的错误:
E/AndroidRuntime( 6173): Uncaught handler: thread Thread-8 exiting due to uncaught exception
E/AndroidRuntime( 6173): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
原因是非主线程中默认没有创建Looper对象,需要先调用Looper.prepare()启用Looper。
(4) Looper.loop(); 让Looper开始工作,从消息队列里取消息,处理消息。
注意:写在Looper.loop()之后的代码不会被执行,这个函数内部应该是一个循环,当调用mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行。
(5) 基于以上知识,可实现主线程给子线程(非主线程)发送消息。
Toast或者Dialog中都有一个Handler的成员变量,在初始化时都会跟着初始化,而Toast或者Dialog中的Handler都需要一个Looper,所以需要在包含该Toast或者Dialog的线程中(如下面的Timer线程)初始化Looper。Looper.prepare();
问题代码:
其实原因就是在非主线程当中刷新了组件。
相关推荐
power bi 演唱会-佐罗
我是业务分析人员,注重使用性,因此,课程不到 30% 的内容就可以解决目前为止我碰到的所有业务问题,剩下的 70% 内容是帮助我提升,优化,升华,精益求精用的,比如第三方工具,比如代码运行速度优化,比如查询逻辑优化等等。系统性上来说,结构明晰,安排上非常有条理,层层递进;《BI 真经》,中有真经二字,略显夸大,而当我第一次证明了这点的时候,我也非常惊讶,这就是我做以下所有事情的一切动力。《BI 真经》综合考量思想性,系统性,本质性,创新性,通用性,技巧性,启发性,对比其他课程有压倒性的显著优势。
Android 中 Looper、Handler、Toast的交互理解
(1) Looper类别用来为一个线程开启一个消息循环。默认情况下Android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环) Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。 (2) 通常是通过Handler对象来与Looper交互的
OTN传送网实战指南:从光层到电层的完整架构解析(附配置示例)
本文深入解析OTN传送网从光层到电层的完整架构,涵盖关键组件、技术实现及配置示例。通过高速公路与光传送网的类比,详细介绍了光层超宽传输管道构建、电层业务调度核心引擎以及控制平面智能运维实战。附有典型组网方案与故障排查指南,助力网络工程师高效部署与维护OTN传送网。
android 子线程toast handle,Android之Handler浅析
Android之Handler浅析Handler相信每个从事Android开发的小伙伴都非常熟悉了, 最常用的场景就是在子线程中进行数据操作然后通过handler消息机制通知到UI线程来更新UI,地球人都知道在子线程中更新UI,一般情况下都会报错。每每出去面试被问到“handler原理”,“消息是怎么从子线程发送到主线程的”等等handler底层的实现,就懵逼了。虽然网上关于分析handler的博...
西门子S7-200 SMART与施耐德ATV变频器Modbus通讯实战:从接线到稳定运行的完整指南
本文详细介绍了西门子S7-200 SMART PLC与施耐德ATV变频器之间实现稳定Modbus通讯的完整实战指南。内容涵盖从硬件接线、参数配置、PLC程序编写到触摸屏设计的全流程,并分享了提升通讯稳定性的关键技巧和常见故障排查方法,助力工业自动化系统可靠运行。
看完让你的RSA提升一个台阶 [GKCTF 2021]RRRRsa
我是,今天我给大家分享一个关于RSA的题目,带大家领略的魅力。今天开始前,我们先学习一下。
在子线程中使用Handler
在子线程中创建Handler时会抛出RuntimeException异常,提示Can’t create handler inside thread …,这是由于在Handler构造时没有找到当前线程的Looper导致的 mLooper = Looper.myLooper(); if (mLooper == null) { throw new RuntimeException( ...
《无人驾驶车辆模型预测控制》(第二版)第四章详细学习——算法部分
根据代码进行的“MPC跟踪直线和圆算法”的详细推导学习记录。
Toast使用报错java.lang.RuntimeException: Can't create handler inside thread 原因及解决方案(一)
这个问题先前没怎么注意,只是知道Toast会有类似于一个队列的东西,你每调用一次都会加入队列,先进先出。今天正好趁解决这个问题来详细研究一下Toast的实现原理。 这个问题一般出现在子线程没有初始化Looper时调用Toast时出现,既然没有初始化Looper那就给他初始化或者让他在UI线程中弹吐司就可以了,话不多说直接给出解决方案: 方案一:在子线程中初始化Looper 识别您的用户身份的一种认证方式,通过公钥,您可以将本地git项目与代码托管服务(CodeHub)建立联系, 然后您就可以很方便的将本地...
Python 爬虫实战:爬取今日头条文章与阅读量数据
本文详细介绍了基于Python爬取今日头条文章与阅读量数据的完整方案。通过分析今日头条API接口,采用Requests+正则表达式技术实现数据抓取,重点解决加密参数构造、请求头模拟、反爬规避等核心问题。文章包含文章列表获取、详情数据提取、互动数据采集等完整流程,并提供数据存储与基础分析方法。同时强调合规使用爬虫技术,控制爬取频率,避免干扰平台运营。该方案可为内容传播分析、用户兴趣研究提供数据支持,但需注意接口参数更新和反爬机制变化,适时调整代码实现。
Can‘t create handler inside thread Thread*** that has not called Looper.prepare()
Android非UI主线程中,若干普通Java线程使用Handler发送接收消息线程1和线程2均为普通Java线程,在Android中创建,然后在这两个普通Java线程中使用Handler发送和接收消息。import android.os._java handler 非主线程。做一个简单的关于Handler,Looper,Message的小演示,代码主界面一个Button按钮,点击发送消息(累计)给线程的Looper循环,然后在LogCat中打印出来:package zhangphil.looper;
在MATLAB中将C语言代码转化为可执行的mexw64文件
这样,您可以将高效的C语言算法集成到MATLAB环境中,以便更好地利用MATLAB的功能和特性。请记住,在使用mex转换C语言代码之前,您需要正确编写和测试C语言代码,并确保它与MATLAB的mex接口兼容。MATLAB是一种功能强大的数值计算软件,它提供了一个机制,可以将C语言代码转化为MATLAB可执行的mexw64文件。在上述命令中,"-output"选项指定生成的mex文件的名称,"myfunction"是您选择的名称,"myfunction.c"是要编译的C语言源文件。步骤1:编写C语言代码。
报错:Can't create handler inside thread that has not called Looper
报错 Android java.lang.RuntimeException: Can'tcreate handler inside thread that has not called Looper.prepare() 因为activity的主线程是自己创建消息队列的,所以在Activity中新建Handler时,不需要先调用Looper.prepare()。 原因是非主线程中默认
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
Can't create handler inside thread that has not called Looper.prepare() 终极解决方法
E/AndroidRuntime(26639): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 在报错的方法前加Looper.prepare(); 方法末尾加Looper.loop(); 很简单
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
android开发过程中Toast在Thread中使用报错
错误日志为:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()例子如下:new Thread(new Runnable() { @Override public void ru...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
1.问题现象 运行程序时,进行某个操作后,程序异常终止并退出,出现一个“很抱歉,XXX已停止运行”的提示,查看"LogCat"发现在红色字体显示的错误行中有一行是:“java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()” 2.解决方案
java.lang.RuntimeException: Can't create handler inside thread that has not call
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 这时今天遇到的第二个错误。 原因是非主线程中没有创建Looper对象,需要先调用Looper.prepare()启用Looper。 解决办法是在线程的开始跟结束间调用Looper.prepa...
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()解...
代码改变世界 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()解决办法 android Toast提示异常:java.lang.RuntimeException: Can't create handler inside thread tha...
Can't create handler inside thread that has not called Looper.prepare()问题解决
UI的显示要在UI线程中执行,而不能在子线程中,也不能在异步线程中执行。
java.lang.RuntimeException: Can‘t create handler inside thread that has not called Looper.prepare()
今天记录一下写安卓的时候遇到的些问题吧,都是比较常见实用的1、错误:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()2、简单的okhttp的Get请求。Json转数组总结: 博主并不是专业的安卓开发,所以遇到的一些问题也可能比较低级,解决方案也并非...
java.lang.RuntimeException: Can't create handler inside thread that has not
在很多时候都需要异步获取数据刷新UI控件,这时候采取的方法就是Handler消息机制和AsyncTask异步任务两种解决方法。 首先是引起异常的例子: new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try
911



被折叠的 条评论
为什么被折叠?



