子线程不显示Toast?Handler构造函数抛异常
Handler不仅在ANR过程中有用到Toast中也用到了Handler。代码如下publicclassMainActivityextendsAppCompatActivity{OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);newThread(newRunnable(){Overridepublicvoidrun(){Toast.makeText(MainActivity.this,子线程,Toast.LENGTH_SHORT).show();}}).start();}}运行安装Logcat里面显示了异常如下Process: com.exp.cpdemo, PID: 1961 java.lang.RuntimeException: Cant create handler inside thread that has not called Looper.prepare() at android.os.Handler.init(Handler.java:200) at android.os.Handler.init(Handler.java:114) at android.widget.Toast$TN$2.init(Toast.java:336) at android.widget.Toast$TN.init(Toast.java:336) at android.widget.Toast.init(Toast.java:103) at android.widget.Toast.makeText(Toast.java:256) at com.exp.cpdemo.MainActivity$1.run(MainActivity.java:40) at java.lang.Thread.run(Thread.java:761)设备是Android 7.1 系统对应源码/frameworks/base/core/java/android/widget/Toast.java为什么会抛出这个异常异常是从makeText()方法抛出的先看Toast.makeText()方法开始看publicstaticToastmakeText(Contextcontext,CharSequencetext,Durationintduration){ToastresultnewToast(context);LayoutInflaterinflate(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);Viewvinflate.inflate(com.android.internal.R.layout.transient_notification,null);TextViewtv(TextView)v.findViewById(com.android.internal.R.id.message);tv.setText(text);result.mNextViewv;result.mDurationduration;returnresult;}这行代码Toast result new Toast(context);new 了一个Toast对象。异常就是这里抛出的。看看Toast构造器里面的代码逻辑publicToast(Contextcontext){mContextcontext;mTNnewTN(context.getPackageName());mTN.mYcontext.getResources().getDimensionPixelSize(com.android.internal.R.dimen.toast_y_offset);mTN.mGravitycontext.getResources().getInteger(com.android.internal.R.integer.config_toastDefaultGravity);}从错误栈里可知这行mTN new TN(context.getPackageName());出了问题。这行代码初始化了一个TN对象。继续看TN这个类privatestaticclassTNextendsITransientNotification.Stub{......finalHandlermHandlernewHandler(){OverridepublicvoidhandleMessage(Messagemsg){...}};TN(StringpackageName){...}...}根据错误栈出异常的是final Handler mHandler new Handler() {...}TN是Toast的静态内部类。在生成TN对象时成员变量mHandler赋值逻辑执行调用了Handler的默认构造函数。接着看Android 7.1 Handler的源码/frameworks/base/core/java/android/os/Handler.java看看构造函数是怎么抛出异常的。如下publicHandler(){this(null,false);}publicHandler(Callbackcallback,booleanasync){if(FIND_POTENTIAL_LEAKS){finalClass?extendsHandlerklassgetClass();if((klass.isAnonymousClass()||klass.isMemberClass()||klass.isLocalClass())(klass.getModifiers()Modifier.STATIC)0){Log.w(TAG,The following Handler class should be static or leaks might occur: klass.getCanonicalName());}}mLooperLooper.myLooper();if(mLoopernull){thrownewRuntimeException(Cant create handler inside thread that has not called Looper.prepare());}mQueuemLooper.mQueue;mCallbackcallback;mAsynchronousasync;}果然在Handler的两参数构造方法中抛出了上面看到的异常。怎么解决知道了原因添加两行代码就好了如下publicclassMainActivityextendsAppCompatActivity{OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);newThread(newRunnable(){Overridepublicvoidrun(){Looper.prepare();Toast.makeText(MainActivity.this,子线程,Toast.LENGTH_SHORT).show();Looper.loop();}}).start();}}Toast显示成功了。

相关新闻

3DS 画质综合最强 10 款游戏

3DS 画质综合最强 10 款游戏

生化危机:启示录 公认 3DS 机能天花板,卡普空自研引擎,拥有实时手电筒光影、细腻角色贴图、环境纹理,密闭邮轮氛围感极强,模型精度、光影效果在 3DS 无出其右。 新光之神话:帕鲁迪娜之镜 3DS 首发大作&…

2026/7/29 17:25:38阅读更多 →
塔塔网申校招一站式平台:自动简历填充+海量岗位+独家优质岗

塔塔网申校招一站式平台:自动简历填充+海量岗位+独家优质岗

每年校招海投,都是应届生最耗时耗力、最容易踩坑的阶段。 想要拿到更多offer、提升上岸几率,大家往往需要投递几十甚至上百家企业,但反复手动填写个人信息、学历背景、实习经历、自我评价等内容,流程枯燥繁琐、极度耗费时间精力&a…

2026/7/29 17:25:38阅读更多 →
从底层架构到依赖管理深度解析CocoaPods

从底层架构到依赖管理深度解析CocoaPods

引言:为什么我们需要深入理解 CocoaPods? 🔗点击跳转「搜狐技术产品」公众号原文 在现代 iOS 开发中,CocoaPods 已经成为了像水和空气一样自然的存在。当我们在终端敲下 pod install 时,第三方库便可以轻松的集成到我…

2026/7/29 17:25:38阅读更多 →
【单片机课程设计/毕业设计】基于单片机的光照强度采集与台灯亮度调节系统 基于光敏传感的多档位智能台灯控制程序设计(011901)

【单片机课程设计/毕业设计】基于单片机的光照强度采集与台灯亮度调节系统 基于光敏传感的多档位智能台灯控制程序设计(011901)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/29 21:11:45阅读更多 →
AI编程工具的演进--迈向设计驱动的工程

AI编程工具的演进--迈向设计驱动的工程

近年来,AI 编程工具演进的速度快得令人眩晕。从最初的“代码自动补全”,到现在“直接把需求交给 Agent 搞定”,我们似乎正在经历一场软件开发范式的剧烈变革。但如果深入到真实的工业开发场景中,你会发现:工具虽然越来…

2026/7/29 21:11:45阅读更多 →
AG Kit社区活动:参与AG Kit开发与讨论的机会

AG Kit社区活动:参与AG Kit开发与讨论的机会

AG Kit社区活动:参与AG Kit开发与讨论的机会 【免费下载链接】ag-kit 项目地址: https://gitcode.com/GitHub_Trending/an/ag-kit AG Kit是一款模块化AI代理工具包(Modular AI Agent Toolkit),为开发者提供构建和扩展AI代…

2026/7/29 21:11:45阅读更多 →
Wot Design Uni ActionSheet 组件:揭秘点击关闭功能的实用优化技巧

Wot Design Uni ActionSheet 组件:揭秘点击关闭功能的实用优化技巧

Wot Design Uni ActionSheet 组件:揭秘点击关闭功能的实用优化技巧 【免费下载链接】wot-design-uni 一个基于Vue3TS开发的uni-app组件库,提供70高质量组件,支持暗黑模式、国际化和自定义主题。 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/29 21:11:45阅读更多 →
Tanel Poder‘s TPT-Oracle:Oracle数据库性能优化与故障排除终极工具包详解

Tanel Poder‘s TPT-Oracle:Oracle数据库性能优化与故障排除终极工具包详解

Tanel Poders TPT-Oracle:Oracle数据库性能优化与故障排除终极工具包详解 【免费下载链接】tpt-oracle Tanel Poders Performance & Troubleshooting Tools for Oracle Databases 项目地址: https://gitcode.com/gh_mirrors/tp/tpt-oracle Tanel Poders …

2026/7/29 21:11:45阅读更多 →
从论文到产品:Trace框架的工业界应用案例分享

从论文到产品:Trace框架的工业界应用案例分享

从论文到产品:Trace框架的工业界应用案例分享 【免费下载链接】Trace End-to-end Generative Optimization for AI Agents 项目地址: https://gitcode.com/gh_mirrors/trace1/Trace Trace作为一款端到端生成式优化框架(End-to-end Generative Opt…

2026/7/29 21:09:45阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →