1.消息对列(MessageQueue)
①Android采用一种复杂的Message Queue机制保证线程的通信
②Message Queue是一个消息队列用来存放Handler发布的消息。Android在第一次启动程序时会默认为UI线程创建一个关联的消息队列,用来管理程序的组件,如Activity,Service,Broatcast Receiver等
③可以在工作线程中创建Handler与UI通信
2.Handler的消息传递机制
①什么是Handler?Handler是Android给我们提供用于更新UI的一套机制,也是一套消息处理机制。我们用它可以发送消息,也可以用它处理消息。
②Handler用途
定时地去发送一个Message或Runnable对象
可以跳转到另一个线程中去执行一些操作
③工作线程可以通过Handler对象和主线程通讯
④Handler对象的所有工作将在主线程中执行
⑤Handler类需要实现handleMessage()方法,来处理消息队列中取出的Message对象
⑥什么是Message:
Message是封装了需要传递的数据交由Handler 处理的对象。
Message的作用:用于存放传递的数据;
是主线程和子线程传递数据的载体
⑦handleMessage()方法由主线程调用,可以在需要的时候更新UI界面。但是必须确保此方法快速完成,因为其他UI操作会等带它完成才能执行
⑧可以在Message中附加不同的参数
//使用线程完成
//使用工作线程是一个匿名类
new Thread(){ //Thread线程
@Override
public void run() {
for (int i=0;i<100;i++){
// tvText.setText(i+"");//不允许,子线程不可更新UI线程中控件属性
Message msg=new Message();
msg.what=0x0001; //消息的what是消息标识,必须有
msg.arg1=i;
handler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}.start();
3.Handler的编程接口4.为什么要使用线程
①当主线程执行的操作时间过长,就无法执行其他操作消息队列中的消息无法处理,UI界面就不会更新,用户事件就不会处理。
②如果主线程执行一个操作超过5秒,Android可能会弹出一个应用程序没有响应的对话框,你的Activity可能会被杀掉。
③UI线程中的操作要尽量短小,费时的操作(如网络链接,数据库访问)等要在单独的线程中完成。
④如果UI线程超过5秒没有响应用户请求,会弹出ANR的对话框。
⑤常见的耗时操作如下
网络链接和网络数据的获取
对存储器的读写
大量的数据计算