可在子线程中使用的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();
}
});