簡體   English   中英

Handler 何時與 Looper 關聯?

[英]When is a Handler associated to a looper?

似乎只是調用 new Handler() 將處理程序與當前線程的循環器相關聯,而沒有將任何線程特定的 arguments 傳遞給構造函數。

  1. 但是,它如何識別當前線程是什么?
  2. 為什么在特定方法(onLooperPrepared()、onCreate())中調用 new Handler() 是強制性的?

但是,它如何識別當前線程是什么?

通過調用Thread.currentThread() static 方法

為什么在特定方法(onLooperPrepared()、onCreate())中調用 new Handler() 是強制性的?

這實際上不是強制性的,具體取決於您希望處理程序執行的任務。
但一般來說,Handler 需要 Looper 來處理消息。

更多:如何在Android中使用線程、Looper和Handler

但是,它如何識別當前線程是什么?

如果您深入調用new Handler() ,您將看到源代碼,我將向您展示:

在此處輸入圖像描述

紅色矩形顯示您在new Handler時需要Looper

僅當您不在 UI 線程中調用new Handler或者您沒有在工作線程中調用Looper.prepare()時,才會出現mLooper==null的情況。

此外,您可以明顯地將處理程序與當前線程的循環器相關聯,請參閱在 UI 線程上定義處理程序,如handler = new Handler(Looper.getMainLooper())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM