Handler中不能操作Toast的解决方案

前言

在安卓开发中,Toast和AlertDialog可以说是最常用的控件之一了吧,但是你在实际开发中有没有遇到过这个异常呢:

Can’t create handler inside thread that has not called Lopper.prepare()

没错,细心的你一定发现了这不就是在“非主线程中操作UI”或“在Handler中嵌套Handler”引发的异常吗,那么关于为什么会出现此错误,以及如何解决这种异常,笔者将在此文中进行简单讲解。

缘由

不能够在Handler中嵌套Handler大家都知道,也尽量在避免,那么在Handler中为什么还不能使用Toast呢,这个其实是因为Toast内部是一个由Handler控制其延时来实现其定时自动消失效果的。至于不能在子线程中使用Toast也很好理解,显示Toast也属于UI操作,当然不能够在子线程中进行了。
这些问题在开发中尽量避免就好了,那实在无法避免有没有什么解决方案呢?答案是肯定的。

方案一

在UI操作外面包装一层 Looper.prepare()Looper.loop()即可,示例代码如下:

Looper.prepare();
// 此处执行UI操作
Toast.makeText(mContext, "text", Toast.LENGTH_SHORT).show();
Looper.loop();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值