子线程中更新ui
activity的onCreate()方法和点击事件这些都是运行在主线程(也叫Ui线程)
里的
主线程用来更新UI界面
只有主线程可以修改应用程序的UI(比如设置ImageView的图片),其他线程(子线程)
修改界面是不允许的。所以如果子线程需要更新需要使用Handler发送消息
在主线程里 创建一个Handler(消息处理器)
//这里导包需要导入andoird.os中的handler包 private Handler handler = new Handler(){ //接受处理消息的方法 //在这里ctrl+o可以快速重写方法,选择handleMessage @Override public void handleMessage(Message msg){ super.handleMessage(msg); } };
在子线程发送消息到主线程
Message msg = new Message(); handler.sendMessage();
调用handler的handlerMeaasge方法处理消息,运行在主线程,更新ui界面
取出来消息的数据,更新界面
Handler简单工作原理
这个图片在很好的说明了Handler中的handleMessage方法的工作原理。但是这个图有个问题,作者把handleMessage画到了主线程的外面,其实handleMessage应该是要在主线程里面,这样才能通过handleMessage来操作主线程的ui
消息机制是如何工作的,Looper,message,handler
Looper轮询器
activity只要已创建,操作系统就会给我们准备Looper轮询器,可以通过getMinaLooper()获取,Looper是个死循环。
MessageQueue 消息队列
handler发送和处理消息
Message对象存放消息的具体信息
评论 (0)