Android 一張圖看明白Hander的運行機制

另外:之前記得一次面試被問到在子線程是否可以創建Hander併發送消息的時候,因爲沒有這麼做過沒有答上來,之後看了一下源碼,必須可以的。但是前提是你必須得手動調用Looper.prepare()方法來保證 你的Looper對象不爲空和主動調用Looper.loop()方法。那爲什麼之前我們在主線程中使用Hander的時候沒有手動調用Looper.prepare()方法卻沒有報錯呢,請移步到Looper.prepareMainLooper()方法看一下。系統在啓動的時候已經調用了些方法來保證主線程中初始化過Looper所以你可以肆無忌憚的直接使用Hander來進行的通訊


另外很多人問:Hander、looper、Message是否都會在同一個線程

Looper、MessageQueue,你在哪個線程創建了Looper和Handler 那麼Looper/MessageQueue/Hander就會在哪個線程,但是他們也是可以分離的,Looper To Hander你可以理解爲輪循到消息以後執行了一個handler的回調。Handler 他Looper可以在同一線程,也可以不在同一個線程。有一種特殊情況如果你在主線程中重新賦值運用了子線程提供的Looper  那麼此時Handler就在主線程、Looper及MessageQueue在子線程。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章