android 消息处理 handler发消息的时候用sendMessage可以,用sendMessageDelayed就出错
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发送消息就会报错呢?
相关推荐
深入理解Android消息处理系统——Looper、Handler、Thread
熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制。Android通过Looper 熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制。Android通过Looper、Handler来
Android Handler消息派发机制源码分析
注:这里只是说一下sendmessage的一个过程,post就类似的 如果我们需要发送消息,会调用sendMessage方法 public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0); } 这个方法会调用如下的这个方法 public final boolean sendMessageDelayed(Message msg, long delayMillis) { if (delayMillis < 0) { delayMillis = 0; } return sen
Android中handler使用浅析
本文主要介绍了Android中handler的使用,具有很好的参考价值。下面跟着小编一起来看下吧
Android Handler线程间的调度
NULL 博文链接:https://18767136122.iteye.com/blog/1988524
用java实现安卓handler消息机制
使用java实现安卓的handler消息机制,支持跨线程通信和发送延迟消息


