1.Handler是用来更新UI界面和处理主线程和子线程之间的通信的
2.为什么android系统要采用只能通过handler机制更新UI呢?
这种设计的根本原因是来解决多线程并发更新UI而导致界面更新混乱的问题的,
而如果每个子线程想要更新UI而加锁的话,就会使程序运行的性能变低,所以采用handler机制
3.handler的原理
handler负责发送消息,Looper负责接收Handler发送的消息,并将消息回传给handler自己
MessageQueue就是负责存储handler发送的消息的一个容器
通俗的讲:
1.handler就是消息处理器,负责处理消息的
2.Message消息,包含消息Id,被处理的对象
3.MessageQueue消息队列,用来存放Handler发送过来的消息
4.Looper消息泵,不断的从消息队列中抽取消息
MessageQueue就像一个水塘里面存储着消息,而Message就是水塘里的水,Looper就像是水泵
不断的从水塘里抽取水,而handler就像操作的工人
4.(1)子线程中创建handler对象之前要调用Lopper.prepare()方法,而且要调用
Looper.loop()方法来启动消息的轮询,然后才会接收到子线程发送的消息.
(2)而在UI线程中创建handler对象则不需要去创建looper对象,因为主线程已经创建好了
在主线程中创建的handler对象重写的hanleMessage()方法中不能执行耗时性操作,因为它是
运行在主线程中的
5.android更新UI的四种方式
(1).handler.sendMessage();
(2).handler.post();
(3).runOnUiThread();
(4).view.post();
6.在子线程中某些情况下其实是可以更新UI的,但是出于线程安全方面的考虑,一律在主线程中
更新UI
7.使用handler过程中的两种异常
(1).在子线程中不能更新UI的异常
(2).在子线程中创建handler对象而没有调用
Lopper.prepare()方法