前言
在安卓开发中,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();