面試官: Handler中有Loop死循環,為什麼沒有阻塞主線程,原理是什麼
心理分析:該問題很難被考到,但是如果一旦問到,100%會回答不上來。開發者很難注意到一個主線程的四循環居然沒有阻塞住主線程
求職者:應該從 主線程的消息循環機制 與Linux的循環異步等待作用講起。最後将handle引起的記憶體洩漏,記憶體洩漏一定是一個加分項
先上一份整理好的面試目錄
前言
Android的消息機制主要是指Handler的運作機制,對于大家來說Handler已經是輕車熟路了,可是真的掌握了Handler?本文主要通過幾個問題圍繞着Handler展開深入并拓展的了解。
站在巨人的肩膀上會看的更遠。大家有興趣的也可以到Gityuan的部落格上多了解了解,全部都是幹貨。而且他寫的東西比較權威,畢竟也是小米系統工程師的骨幹成員。
Questions
- Looper 死循環為什麼不會導緻應用卡死,會消耗大量資源嗎?
- 主線程的消息循環機制是什麼(死循環如何處理其它事務)?
- ActivityThread 的動力是什麼?(ActivityThread執行Looper的線程是什麼)
- Handler 是如何能夠線程切換,發送Message的?(線程間通訊)
- 子線程有哪些更新UI的方法。
- 子線程中Toast,showDialog,的方法。(和子線程不能更新UI有關嗎)
- 如何處理Handler 使用不當導緻的記憶體洩露?
回答一: Looper 死循環為什麼不會導緻應用卡死?
線程預設沒有Looper的,如果需要使用Handler就必須為線程建立Looper。我們經常提到的主線程,也叫UI線程,它就是ActivityThread,ActivityThread被建立時就會初始化Looper,這也是在主線程中預設可以使用Handler的原因。
首先我們看一段代碼
new Thread(new Runnable() { @Override public void run() { Log.e("qdx