Can't create handler inside thread that has not called Looper.prepare()
在子线程中使用Toast时会出现这样的问题,原因是Toast显示需要创建Handler,而Handler默认会关联当前线程的Looper。
UI主线程中会自动创建Looper,而子线程中需要手动使用
Looper.prepare();
来创建。要是我们没有创建,就会出现上面错误。
想更新UI,需要关联主线程的Looper,像这样post一个UI操作,其中onMessage()为UI操作:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
mOnMessageListener.onMessage(message);
}
});
想使用子线程的Looper,先使用Looper.prepare();创建Looper,然后直接new Handler()就可以关联该Looper:
Looper.prepare();
new Handler().post(new Runnable() {...});
Looper.loop();
使用Looper.loop();开始循环。