美文网首页
Android消息机制

Android消息机制

作者: 林祖朋 | 来源:发表于2018-05-14 11:05 被阅读3次

    Android的消息机制主要是指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程。

    大概的流程:

    Handler创建完毕后,这个时候内部的Looper以及MessageQueue就可以和Handler一起协同
    工作了,然后通过Handler的post方法将一个Runnable投递给内部的Looper去处理,也可以通
    过Handler的send发送一个消息,这个消息同样会在Looper中处理。其实post的方法最终也是通过send方法完成的,接下来看一下send方法的工作过程。当Handler的send方法被调用时,它会调用MessageQueue中的enqueueMessage方法,将这个消息放入到消息队列中,然后looper发现有新消息来时,就会处理这个消息,最终消息中的Runnable或Handler中handleMessage方法被调用。

    MessageQueue的工作原理:

    其名字叫消息队列,其实内部实现并不是真正的消息队列,实际上是通过单链表的数据
    结构来维护消息列表,单链表在删除和插入上比较有优势。
    其主要有两个基本的操作,插入和读取;
    插入:即enqueueMessage,就是向消息队列插入一条消息即单链表的插入操作。
    读取:即next,读取操作本身伴随着删除操作.next 方法是个无限循环的方法,如果消息队列中没有消息,那么next方法会一直阻塞在那里。当有消息来时,会返回这个消息并将其从单链表中删除。

    Looper的工作原理:

    Looper在Android消息机制中扮演着消息循环的角色,具体来说就是不停的从MessageQueue中查看是否有新信息,如果有新消息就会立即处理,否则就会一直阻塞在那里.handler的工作需要Looper ,没有Looper就会报错。

    new Thread("Thread#2"){
            @overrade
             public void run(){ 
                 //为当前线程创建Looper
                 Looper.prepare();
                 Handler handler=new Handler();
                 //开启消息循环 
                 Looper.loop();
             }
    }
    

    手动创建Looper时,所有的事情完成以后应调用quit来终止消息循环。否则这个子线程就会一直处于等待的状态。
    Looper最重要的方法是loop,只有调用了loop后,消息系统才会真正的起作用。

    Handler的工作原理

    主要是发送和接受过程。Handler发送消息的过程是向消息队列中插入了一条消息,MessageQueue的next方法就会返回这条消息给Looper,Looper接受到消息就开始处理了,
    最终消息由Looper交由Handler处理,即Handler的dispatchMessage会被调用。消息处理阶段开始:


    data.png

    相关文章

      网友评论

          本文标题:Android消息机制

          本文链接:https://www.haomeiwen.com/subject/xaqfdftx.html