一、概念
1、Android中Handler的使用,一般都在UI主線程中執行,是以在Handler接收消息後,處理消息時,不能做一些很耗時的操作,否則将出現ANR錯誤。
2、HandlerThread繼承于Thread,是以它本質就是個Thread。(本身是一個線程)
3、與普通Thread的差别就在于,主要的作用是建立了一個線程,并且創立了消息隊列,有自己的looper,可以讓我們在自己的線程中分發和處理消息。
1、Handler的處理過程運作在建立Handler的線程裡
2、一個線程對應一個Looper,一個Looper對應一個MessageQueue,一個Looper可以對應多個Handler。
3、handler應該由處理消息的線程建立。
4、handler與建立它的線程相關聯,而且也隻與建立它的線程相關聯。handler運作在建立它的線程中,是以,如果在handler中進行耗時的操作,會阻塞建立它的線程。
5、Looper.myLooper(); //獲得目前的Looper
Looper.getMainLooper() //獲得UI線程的Lopper
6、Handle的初始化函數(構造函數),如果沒有參數,那麼他就預設使用的是目前的Looper,如果有Looper參數,就是用對應的線程的Looper。
7、如果一個線程中調用Looper.prepare(),那麼系統就會自動的為該線程建立一個消息隊列,然後調用Looper.loop();之後就進入了消息循環,這個之後就可以發消息、取消息、和處理消息。
Android的線程分為有消息循環的線程和沒有消息循環的線程,有消息循環的線程一般都會有一個Looper。事實上Android提供了一個封裝好的帶有looper的線程類,即為HandlerThread
執行個體2
注意:寫 MHandlerThread 的時候,最好寫上線程的優選級