可在子线程中使用的Toast

可在子线程中使用的Toast

ONE Goal,ONE Passion!


 一般我们使用taost时必须在主线程中,可是如果我们想在子线程中使用是就不是那么方便了.因为系统的Toast在子线程中使用会报错.下面我们做一些处理,就可以实现在子线程中使用Toast.

把这段代码封装成一个工具类,方便我们以后使用.

public class MyUtils {

    /**
     * 显示toast
     * @param ctx
     * @param msg
     */
    public static void showToast(final Activity ctx,final String msg){
        // 判断是在子线程,还是主线程
        if("main".equals(Thread.currentThread().getName())){
            Toast.makeText(ctx, msg, 0).show();
        }else{
            // 子线程
            ctx.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(ctx, msg, 0).show();
                }
            });
        }


    }
  • 看一下不同线程中使用Thread.currentThread().getName()得到的信息
    这里写图片描述
    主线程中得到的总是”main”

代码分析:

1,如果线程运行在主线程中,那么Thread.currentThread().getName()会得到”main”.

"main".equals(Thread.currentThread().getName())

2,使用runOnUiThread()方法将toast强制运行带主线程.

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(ctx, msg, 0).show();
                }
            });
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值