Toast在子线程中的使用

本文详细介绍了在Android子线程中正确使用Toast的方法。为了避免异常,文章提供了两种解决方案:一是在子线程中初始化Looper;二是通过主线程中的Handler来间接调用Toast。并解释了Looper初始化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mLooper = Looper.myLooper();
if (mLooper == null) {
    throw new RuntimeException("Can't create handler inside thread that has not called Looper.prepare()");
}

 使用Handler时要对Looper进行初始化的,Toast.makeText().show()方法里面(源码里面)创建了一个handler,所以需要Looper的初始化,但是Android系统帮我们实现了主线程(也就是UI线程中)的Looper初始化。所以在子线程中要使用Toast.makeText方法需要自己Looper的初始化,或者想办法把其运行在主线程中。有两个方法:

1.在子线程中添加如下两个方法

Looper.prepare();//给当前线程初始化Looper

Toast.makeText().show();//Toast初始化的时候会new Handler(),无参构造默认获取当前线程的Looper,                                           如果没有prepare过,则抛出题主描述的异常。

 Looper.loop()  //最后调用,这种办法会终止子线程之后的代码, Looper.loop()里面是一个死循环。这样的话,会导致进程里面的线程越来越多,这个是不推荐的。

2.在主线程中建立一个重写了handleMessge()方法的android.os.Handler,然后在子线程中调用handle.handleMessge()(传入想要吐司吐出的内容即可)方法,然后会在主线程中重写handleMessge()方法中执行具体内容(在这里面调用Toast.makeText().show()方法即可)。


 

 

 

转载于:https://my.oschina.net/u/2987490/blog/1457044

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值