战队的Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)

    //用来标识一个消息,接收消息方可以根据它知道这个消息是做什么的
    public int what;

    //如果你的消息要传递的数据是整型的,可以直接使用 arg1 和 arg2,而不需要使用构造一个 Bundle
    public int arg1;
    public int arg2;

    //一个任意类型的对象,在使用 Messenger 跨进程传递消息时,通常使用它传递给接收者
    //在其他场景下我们一般使用 setData() 方法
    public Object obj;

    //负责回复消息的 Messenger,有的场景下(比如接受者、发送者模型)需要使用它
    public Messenger replyTo;

    //当前消息的标志,只在被 Messenger 传递消息时使用,其他情况下都是 -1
    public int sendingUid = -1;

    //标识当前消息是否在被使用
    //当一个消息入队时这个标志会被改变,在被重新获取后重置
    //|||军魂战狼招人啦https://iknow-pic.cdn.bcebos.com/fd039245d688d43f633a7d6a6f1ed21b0ff43b93|||
    //当一个消息已经在被使用时,二次入队或者回收会报错(这就是我前言中提到的错误原因)
    //
    /*package*/static final int FLAG_IN_USE = 1 << 0;

    //标识当前 消息是否是异步的
    /*package*/static final int FLAG_ASYNCHRONOUS = 1 << 1;

    //在 copyFrom 方法中要清除的标志
    /*package*/static final int FLAGS_TO_CLEAR_ON_COPY_FROM = FLAG_IN_USE;
    /*package*/int flags;

    /*package*/long when;

    //很关键的数据部分
    /*package*/Bundle data;

    //发送和处理消息关联的 Handler
    /*package*/Handler target;

    //消息的回调
    /*package*/Runnable callback;

    //在有些场景下还会以链表的形式关联后一个消息
    /*package*/Message next;

    //消息池
    private static final Object sPoolSync = new Object();
    private static Message sPool;    //回收消息链表
    private static int sPoolSize = 0;

    private static final int MAX_POOL_SIZE = 50;

    private static boolean gCheckRecycle = true;
 

你可能感兴趣的:(别太放肆没什么用,android)