美文网首页程序员
Android消息机制及其原理

Android消息机制及其原理

作者: 天真的小罗罗 | 来源:发表于2018-10-27 16:36 被阅读0次

Android消息机制及其原理

当Thread生成时会产生一个looper来进行通信,looper同时创建一个messagequeue来进行消息的处理和分发,handle push消息到thread,收到消息后looper启动loop方法,messagequeue进入循环,处理消息最后发送给handle

Handle的原理

andriod提供了Handler和Looper来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换

MessageQueue

  • MessageQueue是持有Message(在Looper中派发)的一个链表,Message并不是直接添加到MessageQueue中的,而是通过与Looper相关联的Handler来进行的。
  • 用来存放线程放入的消息,读取会自动删除消息,单链表维护,在插入和删除上有优势。在其next()中会无限循环,不断判断是否有消息,有就返回这条消息并移除。

Looper

  • 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue
  • Looper创建的时候会创建一个MessageQueue,调用loop()方法的时候消息循环开始,loop()也是一个死循环,会不断调用messageQueue的next(),当有消息就处理,否则阻塞在messageQueue的next()中。当Looper的quit()被调用的时候会调用messageQueue的quit(),此时next()会返回null,然后loop()方法也跟着退出。
  • MessageQueue和Looper是一对一关系,Handler和Looper是多对一

Handler

  • 在主线程构造一个Handler,与Looper沟通,以便push新消息到MessageQueue里;
  • 接收Looper从MessageQueue取出Handler所送来的消息。然后在其他线程调用sendMessage(),此时主线程的MessageQueue中会插入一条message,然后被Looper使用.

Thread

  • UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue,系统的主线程在ActivityThread的main()为入口开启主线程,其中定义了一系列消息类型,包含四大组件的启动停止。

消息队列分发算法源码

  • 每个message之间拉手,知道自己前面和后面的message
  • message通过时间戳来排序,小的在前
  • 配合handle取出message,message时间到,就去除队列首个message,取出之后置为null,第二个message就排在第一,类推
//消息的存放
boolean enqueueMessage(Message msg, long when) {
    synchronized (this) {
        msg.when = when;
        Message p = mMessages;   
        if (p == null || when == 0 || when < p.when){
            msg.next = p;
            mMessages = msg;     
        } else {
            Message prev;
            for (;;) {           
                prev = p;
                p = p.next;
                if (p == null || when < p.when) {
                    break;
                }
            }
            msg.next = p; 
            prev.next = msg;
        }
    }
    return true;
}

相关文章

  • Android消息机制和原理

    Android消息机制及其原理 Handle的原理 andriod提供了Handler和Looper来满足线程间的...

  • Android消息机制及其原理

    Android消息机制及其原理 当Thread生成时会产生一个looper来进行通信,looper同时创建一个me...

  • Android消息机制与类加载

    Android消息机制原理Android类加载Android热修复 Android消息机制    Handler、...

  • 消息循环机制及其原理

    一、什么是消息循环 消息循环概述:Android的消息循环是针对线程的,每个线程都可以有自己的消息队列和消息循环,...

  • 消息机制

    消息机制Handler的工作原理 Android中的消息机制主要就是指Handler的运行机制,而Handler的...

  • Android 消息机制

    概述 Android 消息机制主要是指 Handler 的运行机制及其附带的 MessageQueue 和 Loo...

  • Android消息机制

    Android消息机制 基本原理 通过Handler、Looper、MessageQueue、Message,将一...

  • Android 消息机制(Handler Looper Mess

    1.概述 ​ Android的消息机制主要是指Hanlder的运行机制及其附带的MessageQueue和Lo...

  • Android的Handler消息机制 解析

    Android的Handler消息机制 实现原理 主线程会自动调用Looper.prepareMainLooper...

  • <> Chapter 10

    Android的消息机制 Android消息机制概述 Android的消息机制主要是指Handler的运行机制以及...

网友评论

    本文标题:Android消息机制及其原理

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