looper在android的訊息機制充當訊息迴圈的角色,它不停的充messagequeue中拿出訊息,並將訊息交給hanlder處理,下面是他的常用方法解析。
專案原始碼
1. android主線程在建立的時候會主動建立乙個looper
activitythread是android的主線程,在該類的main函式中有如下部分**
public static void main(string args)
複製**
looper.preparemainlooper()方法的**部分**:
public static void preparemainlooper
() 複製**
從上面的資訊我們可以知道,activitythread的main函式呼叫了looper.preparemainlooper函式,而在preparemainlooper函式中有呼叫了looper的prepare來建立looper。那麼prepare函式是如何建立looper呢?我們看下面第二中方式來分析。
2. 在子執行緒中直接使用looper.prepare()方法建立
private static void prepare(boolean quitallowed)
//建立looper
sthreadlocal.set(new looper(quitallowed));
}複製**
private looper(boolean quitallowed)
複製**
該方法主要是用來從訊息佇列裡面拿出訊息。我們可以看下面的部分原始碼
public static void loop
() ...
try finally
}...
}}複製**
從上面的部分**中loop()函式裡面有乙個無限迴圈,這個迴圈就是不停的從messagequeue中取訊息,並將取出訊息交給handler的dispatchmessage()來處理,只有當queue.next()取得message為null的時候才跳出迴圈。
//獲取當前執行緒的looper
looper looper = looper.mylooper();
//獲取主線的looper
looper mainlooper = looper.getmainlooper();
//清除全部訊息
looper.quit();
//清除延遲訊息
looper.quitsafely();
複製**
Android訊息機制
looper執行緒 主人 的 message queue 郵箱 唯一的管理人員 handler快遞小哥 跟管理人員looper溝通,送 push 新郵件 訊息 讓管理人員looper代簽扔進郵箱 message queue,也接收管理人員從郵箱拿出來的件。message queue 訊息佇列 主人的...
android 訊息機制
color green 一 角色描述 1.looper 乙個執行緒可以產生乙個looper物件,由它來管理此執行緒裡的message queue 訊息佇列 2.handler 你可以構造handler物件來與looper溝通,以便push新訊息到message queue裡 或者接收looper 從...
Android訊息機制
參考文章 答案在於 threadlocal。看 一下子就可以知道了 一開始就構造了乙個looper,我們看looper.mylooper 做了什麼。可以 看到就是呼叫了一下sthreadlocal.get 看一下sthreadlocal的定義 這裡說,如果不呼叫prepare 方法就會返回空,我們去...