//用来标识一个消息,接收消息方可以根据它知道这个消息是做什么的
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 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)
于 2023-05-28 18:52:42 首次发布