Android的消息機制源碼分析(1)- ThreadLocal
Android的消息機制源碼分析(2)- 消息隊列(MessageQueue)
Android的消息機制源碼分析(3)- Looper
Android的消息機制源碼分析(4)- Handler
Android的消息機制的總體流程
Handler發送消息工作流程
Handler發送消息工作流程
主線程中的消息循環
這里有點不一樣的是,用了prepareMainLooper()給主線程創建Looper,
創建好了之后它的Handler是在ActivityThread內部
private class H extends Handler {
public static final int LAUNCH_ACTIVITY = 100;
public static final int PAUSE_ACTIVITY = 101;
public static final int PAUSE_ACTIVITY_FINISHING= 102;
public static final int STOP_ACTIVITY_SHOW = 103;
public static final int STOP_ACTIVITY_HIDE = 104;
public static final int SHOW_WINDOW = 105;
public static final int HIDE_WINDOW = 106;
public static final int RESUME_ACTIVITY = 107;
public static final int SEND_RESULT = 108;
public static final int DESTROY_ACTIVITY = 109;
public static final int BIND_APPLICATION = 110;
public static final int EXIT_APPLICATION = 111;
public static final int NEW_INTENT = 112;
public static final int RECEIVER = 113;
public static final int CREATE_SERVICE = 114;
public static final int SERVICE_ARGS = 115;
public static final int STOP_SERVICE = 116;
}
可以看到有好多消息的類型常量,
消息模型
ActivityThread通過Application和AMS進行線程間通信,AMS通過線程間通信的方式完成主線程的請求后回調ApplicationThread中Binder方法,然后ApplicationThread會向H發型消息,H收到消息會切換到主線程中執行
注意點:
ActivityThread不是線程,應該是封裝了UI消息循環和操作Activity生命周期的工具類