Skip to content

looper-handler-demo ​

1. 实验目标 ​

用最小 Android 实现验证主线程消息循环机制(对应 docs/01-runtime-concurrency/13):

  • Handler + MessageQueue:消息先入队,由 Looper 逐条取出执行(入队 ≠ 立即执行)
  • 延迟消息:postDelayed 的消息按 when 时间排序,先发的不一定先执行
  • HandlerThread:子线程自带 Looper,后台串行处理任务
  • 子线程 → 主线程回传:通过主线程 Handler sendMessage 安全更新 UI

2. 工程要点 ​

  • 主线程 Handler(Looper.getMainLooper()):handleMessage 里更新日志
  • HandlerThread("DemoWorker"):start() 后 Handler(workerThread.looper) 获得子线程 handler
  • 观察 postDelayed 顺序:A(0ms) → C(0ms) → B(100ms),验证 MessageQueue 按时间排序
  • onDestroy 必须 workerThread.quitSafely(),否则子线程 Looper 泄漏

3. 运行方式 ​

bash
cd labs/android/host
./gradlew installDebug

设备/模拟器打开 Android Host → 打开 Looper / Handler 消息循环实验室。

4. 预期现象 ​

  • "发消息":日志依次显示 msg1/2/3 按入队顺序执行
  • "延迟消息":A → C → B(B 因 100ms 延迟排到队尾)
  • "子线程任务":3 个任务串行执行(每个 300ms),完成后逐个回传主线程日志

5. 常见误区 ​

误区实际情况
sendMessage 立即执行只是入队,真正执行取决于 Looper 从队列取出的时机
子线程可以直接更新 UI必须通过主线程 Handler(或 runOnUiThread)回传
HandlerThread 用完不回收不 quitSafely() 会永久占用一条线程

6. 对应知识库文档 ​

7. 关键源码 ​

站点构建时间:2026/8/24 23:43:17