关于Handler消息传递机制的认识

来源:互联网 发布:看乐视电视网络直播 编辑:程序博客网 时间:2024/05/18 01:33
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()方法

0 0