2017/03/04

Android的Thread、Handler和Looper的關係

- Android定義了兩種會觸發ANR的時機
1.當使用者的輸入事件超過5秒沒有反應
2.當BroadcastReceiver收到intent後,超過10秒還沒結束onReceive()
所以若有耗時的工作要處理,就需要自己建立Thread

- 1個Thread只和一個Message queue有關,Handler負責從queue的tail
放進數據,從head取出數據,Looper負責管理一套機制,讓Handler反覆
存取message

- Message實現了Parcelable的接口,而且不建議調用recycle()

- 1個Message queue只會對應一個Handler,一個Looper

- Looper有分子線程的looper和主線程的looper。若是子線程向主線程
發送message,則looper必為主線程的looper(由系統維護)。若是主線程
向子線程發送message,則looper是子線程的looper(手動創建)