一、message类型
(1)同步消息(普通消息)
(2)屏障消息
message的tartget为空的消息,该消息是通过MessageQueue.postSyncBarrier方法(虽然是public但@hide注解无法直接调用,只能通过反射)
创建屏障消息
try {
MessageQueue queue=handler.getLooper().getQueue();
Method method=MessageQueue.class.getDeclaredMethod("postSyncBarrier");
method.setAccessible(true);
token= (int) method.invoke(queue);
} catch (Exception e) {
e.printStackTrace();
}
移除屏障
try {
MessageQueue queue=handler.getLooper().getQueue();
Method method=MessageQueue.class.getDeclaredMethod("removeSyncBarrier",int.class);
method.setAccessible(true);
method.invoke(queue,token);
} catch (Exception e) {
e.printStackTrace();
}
(3)异步消息
Message.isAsynchronous()为true的消息,只需通过Message.setAsynchronous(true)即可标记为异步消息
二、同步屏障机制
1、消息执行到屏障消息时将只执行消息队列里的异步消息,这里并不是开启线程异步处理,只是筛选作用,直到移除屏障后同步消息才能执行
2、异步消息如果没有屏障会认为普通消息处理,只当发生屏障后才能体现出特权