发布网友 发布时间:2022-04-25 02:14
共5个回答
热心网友 时间:2023-10-21 00:04
因为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界面显示出来。
热心网友 时间:2023-10-21 00:04
晕,在子线程不能操作任何组件,你调用activity方法里面的runOnUIThread()就可以toast了
热心网友 时间:2023-10-21 00:04
在Toast前调用loop.prare之后调用loop.looper。就可以了。
热心网友 时间:2023-10-21 00:05
Looper.prepare(); Toast.makeText(getActivity(), "十秒钟后", Toast.LENGTH_SHORT) .show(); Looper.loop();
热心网友 时间:2023-10-21 00:06
子线程里不能做此类操作,你在handler里面做toast显示塞!!