Android随笔-ActivityThread ActivityThread 是什么ActivityThread 就是我们常说的「主线程」/「UI线程」但它并不是 Thread 的子类而是一个管理类/控制器负责协调应用进程中所有组件的生命周期和消息处理。一、本质定位特性说明类定义final class ActivityThread— 不是Thread的子类运行线程运行在 Zygote fork 出的应用主线程上真正入口public static void main(String[] args)— 每个 Android App 的真正入口核心职责管理主线程 Looper、处理 AMS 发来的生命周期指令、创建/管理 Activity/Service/Application二、核心源码main() 方法// frameworks/base/core/java/android/app/ActivityThread.javapublicstaticvoidmain(String[]args){// 1. 初始化主线程 Looper不可退出Looper.prepareMainLooper();// 2. 创建 ActivityThread 实例ActivityThreadthreadnewActivityThread();// 3. 绑定到 AMS创建 ApplicationThreadBinder Stubthread.attach(false,startSeq);// 4. 获取主线程 Handler内部类 Hif(sMainThreadHandlernull){sMainThreadHandlerthread.getHandler();}// 5. 启动消息循环在这里阻塞 foreverLooper.loop();// 永远不会执行到这里thrownewRuntimeException(Main thread loop unexpectedly exited);}关键点Looper.prepareMainLooper()为主线程创建唯一的 LooperquitAllowedfalse主线程 Looper 不能退出thread.attach()通过 Binder 向 AMS 注册建立双向通信通道Looper.loop()for( ;; ) 死循环利用 epoll 机制闲则睡眠忙则唤醒——这就是为什么主线程不会卡死的原因三、架构位置核心设计AMS 从不直接调用 ActivityThread 的方法。 而是通过 ApplicationThreadBinder IPC→ H HandlerMessageQueue→ ActivityThread 的方式间接通信确保所有生命周期回调都在主线程执行线程安全。四、关键内部类内部类/组件作用ApplicationThread继承IApplicationThread.Stub是 AMS 调用应用进程的 Binder 入口H(Handler)处理所有主线程消息LAUNCH_ACTIVITY、PAUSE_ACTIVITY、BIND_APPLICATION 等ActivityClientRecord存储 Activity 的完整信息Activity 实例、Intent、Window、ActivityInfo 等mInstrumentation生命周期代理/钩子创建 Activity 并调用生命周期方法mActivitiesArrayMapIBinder, ActivityClientRecord存储进程中所有 ActivitymServicesArrayMapIBinder, Service存储进程中所有 Service五、消息流转AMS 如何启动 ActivityAndroid 9 的变化引入了 ClientTransaction 和 TransactionExecutorAMS 发送 EXECUTE_TRANSACTION 消息由 TransactionExecutor 解析并执行 LaunchActivityItem.execute()。六、H Handler 处理的关键消息Message作用LAUNCH_ACTIVITY启动新 ActivityPAUSE_ACTIVITY暂停当前 ActivityRESUME_ACTIVITY恢复 ActivitySTOP_ACTIVITY_SHOW停止并隐藏 ActivityBIND_APPLICATION创建 Application 并调用 onCreateEXECUTE_TRANSACTION执行 ClientTransactionAndroid 9CREATE_SERVICE创建 ServiceRECEIVER执行 BroadcastReceiver.onReceive七、总结ActivityThread 是 Android 应用的「主线程控制器」——它本身不是线程而是运行在 Zygote fork 出的主线程上的一个管理类。它通过 ApplicationThread 接收 AMS 的 Binder 指令通过内部 H Handler 将指令分发到主线程消息队列最终调用 Instrumentation 执行 Activity/Service/Application 的生命周期回调。