为什么在子线程中创建handler时会报以下错误
Can’t create handler inside thread that has not called Looper.prepare()
因为Android系统默认情况下:非主线程中没有开启Looper,而Handler对象必须绑定Looper对象。
第二个子线程中注意要加上 Looper.prepare(); Looper.loop();
ex:
private Thread notifyingThread;
private Thread secondThread;
private TextView tv_show;
//创建第一个子线程
notifyingThread = new Thread(null, mTask, "子线程1");
notifyingThread.start();
private Runnable mTask = new Runnable() {
public void run() {
//第二个子线程
secondThread = new Thread(null,secondRunable,"子线程2");
secondThread.start();
}
};
private Runnable secondRunable = new Runnable() {
@Override
public void run() {
Looper.prepare();
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case 1:
mHandler.sendEmptyMessage(0);
break;
}
}
};
handler.sendEmptyMessageDelayed(1,2000);
Looper.loop();
}
};
//更新视图的handler
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
tv_show.setText("dsfasdf");
break;
default:
break;
}
}
};
本文详细解析了在Android子线程中使用Handler时出现的错误原因:未调用Looper.prepare()。文章通过示例代码说明,在子线程中必须先调用Looper.prepare()和Looper.loop()来初始化Looper,才能正确创建并使用Handler。
2015

被折叠的 条评论
为什么被折叠?



