并不一定在主线程,只要 Toast show 的线程有可用 Looper 对象即可(即 Hanlder 可用),主线程默认有 Looper,其他线程默认没有,具体用法如下。
//主线程,直接可用
Toast.makeText(context, "xxx", Toast.LENGTH_SHORT).show();
//子线程提供Looper也可用
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(context, "xxx", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}.start();
//崩溃,提示Can't toast on a thread that has not called Looper.prepare()
new Thread() {
@Override
public void run() {
Toast.makeText(context, "xxx", Toast.LENGTH_SHORT).show();
}
}.start();
网友评论