首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Handler.post(Runnable) 其實仍在主執行緒:用途僅為 UI 更新

     編輯:程式設計疑難解答

許多開發者誤以為 mHandler.post(runnable) 會開啟子執行緒。實則 Handler 預設綁定建立它的執行緒 (通常是主執行緒 Looper),post 只是將 Runnable 加入該執行緒的訊息隊列尾部,依然在主執行緒執行。

驗證方式

Runnable r = () -> Log.d("TAG", "Thread: " + Thread.currentThread().getName());
new Handler(Looper.getMainLooper()).post(r); // 輸出 "main"
new Handler().post(r); // 同上,預設綁定當前執行緒

真正開啟子執行緒的方式

  • new Thread(r).start()
  • ExecutorService.execute(r)
  • HandlerThread + 其 Looper 建立 Handler
  • Kotlin 協程 GlobalScope.launch(Dispatchers.IO) { ... }

Handler.post 的正確使用場景

  1. 延遲執行 UI 操作: handler.postDelayed(() -> updateUI(), 3000);
  2. 從子執行緒切回主執行緒: 子執行緒中 mainHandler.post(() -> tv.setText("done"));
  3. 合併多次 UI 更新: 短時間內多次 post 同一更新任務,最終只執行一次 (需自行去重)。
結論:Handler.post 不創建執行緒,只是排程任務到既有 Looper 執行緒。需耗時運算請顯式用子執行緒。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved