因为Toast在创建的时候会依赖于一个Handler,并且一个Handler是需要有一个Looper才能够创建,而普通的线程是不会自动去创建一个Looper对象,比如说在某个Activity中能new一个Handler是因为Android系统在启动一个Activity的时候会默认的创建一个Looper对象,因此不能够在子线程中显示Toast,你可以在开启的子线程中执行Looper.prepare()来构建一个Looper,然后在显示Toast,但是不要忘记执行Looper.loop()来加载这个Looper,当然,也可以使用主线程的Looper,获取主线程的Looper的方法是Looper.getMainLooper();同时需要注意的是,同样的不能在子线程中去更新UI界面,因为Toast是相对独立于UI界面的,就好比应用虽然crash掉了,并且已经返回到home界面,但是Toast依然会在hone界面显示出来。
(摘自:百度知道网友)
Can't create handler inside thread that has not called Looper.prepare()
最新推荐文章于 2022-08-01 17:09:09 发布
本文解释了为什么不能直接在子线程中显示Toast及其原因,并提供了两种解决方案:一种是在子线程中通过Looper.prepare()创建Looper,另一种是利用主线程的Looper对象。
5540

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



