android訊息機制 Looper

2021-09-11 15:29:47 字數 1350 閱讀 4573

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 方法就會返回空,我們去...