android 消息处理 handler发消息的时候用sendMessage可以,用sendMessageDelayed就出错

左燈右行 2013-02-21 02:12:03

public class Looper01Activity extends Activity {

private TextView view;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.looper01);

view = (TextView)findViewById(R.id.lp_tv_view);
view.setText("0");

MyThread mt = new MyThread(view);
mt.start();
}

private class MyThread extends Thread{

private TextView v;
private Handler mh;

public MyThread(TextView v){
this.v = v;
}
@Override
public void run() {
super.run();
Looper.prepare();

mh = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
v.setText(msg.what + ""); //会在执行这句话的时候报错
//如果发消息时用的是sendMessage不报错,
//用sendMessageDelayed就会报错
}
};

Message msg = new Message();
msg.what = 3;
mh.sendMessage(msg);
// mh.sendMessageDelayed(msg, 1000); //如果这么发消息就会报错,
// 错误信息是 //android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Looper.loop();
}

}
}



android不是子线程不能更新UI吗?为什么用sendMessage就可以啊,为什么用sedMessagedelayed发送消息就会报错呢?

...全文
302 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ihrthk 2014-03-04
  • 打赏
  • 举报
回复
请注意你new Handler的位置是你自己开劈的线程,更新UI只能在主线程哦。
Sky_明 2014-03-04
  • 打赏
  • 举报
回复
Handler要放在工作线程里面新建,Handler是运行在主线程中的

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧