安卓單執行緒模型

2021-10-06 15:13:06 字數 1893 閱讀 8008

handle非同步訊息機制實現

新增乙個子執行緒,子執行緒執行耗時操作後可以通過主線程的handler向ui執行緒傳送訊息,有ui執行緒去更新介面。

handler關聯乙個單獨的執行緒,擁有執行緒的訊息佇列

預設情況下,handler和呼叫該handler的執行緒關聯

handler可以接收、排程、派發、處理訊息

涉及到的核心類

handler

message

//建立uihandler

private handler uihandler =

newhandler()

case0:

}}};

關鍵**:子執行緒建立訊息並傳送訊息

class

workthread

extends

thread

catch

(excrption e)

}}

android為了降低這個開發難度,提供了asynctask。asynctask就是乙個封裝過的後台任務類,顧名思義就是非同步任務。

asynctask直接繼承於object類,位置為android.os.asynctask .

asynctask定義了三種泛型型別 params,progress和result。

· params 啟動任務執行的輸入引數,比如http請求的url。

· progress 後台任務執行的進度百分比。

· result 後台執行任務最終返回的結果,比如string。

乙個非同步任務的執行一般包括以下幾個步驟:

1.execute(params… params),執行乙個非同步任務,需要我們在**中呼叫此方法,觸發非同步任務的執行。

2.onpreexecute(),在execute(params… params)被呼叫後立即執行,一般用來在執行後台任務前對ui做一些標記。

3.doinbackground(params… params),在onpreexecute()完成後立即執行,用於執行較為費時的操作,此方法將接收輸入引數和返回計算結果。在執行過程中可以呼叫publishprogress(progress… values)來更新進度資訊。

4.onprogressupdate(progress… values),在呼叫publishprogress(progress… values)時,此方法被執行,直接將進度資訊更新到ui元件上。

5.onpostexecute(result result),當後台操作結束時,此方法將會被呼叫,計算結果將做為引數傳遞到此方法中,直接將結果顯示到ui元件上。

6.oncancelled()使用者呼叫取消時,要做的操作

handler機制主要角色

n message:訊息,其中包含了訊息id,訊息處理物件以及處理的資料等,由messagequeue統一列隊,終由handler處理。

n handler:處理者,負責message的傳送及處理。使用handler時,需要實現handlemessage(message msg)方法來對特定的message進行處理,例如更新ui等。

n messagequeue:訊息佇列,用來存放handler傳送過來的訊息,並按照fifo規則執行。當然,存放message並非實際意義的儲存,而是將message以鍊錶的方式串聯起來的,等待looper的抽取。

n looper:訊息幫浦,不斷地從messagequeue中抽取message執行。因此,乙個messagequeue需要乙個looper。

n thread:執行緒,負責排程整個訊息迴圈,即訊息迴圈的執行場所。

redis單執行緒模型

redis基於reactor模式開發了自己的網路事件處理器,稱之為檔案事件處理器 file event hanlder 檔案事件處理器由socket io多路復用程式 檔案事件分派器 dispather 事件處理器 handler 四部分組成。io多路復用程式會同時監聽多個socket,當被監聽的s...

redis的單執行緒模型

redis使用文字事件處理器file event handler 整個檔案事件處理器是單執行緒的,所以才叫做單執行緒模型,他採用io多路復用機制同時監聽多個socket,根據socket上的事件來選擇對應的事件處理器進行處理 檔案事件處理器的結構包含4個部分 多個socket可能會併發產生不同的操作...

NIO實現Reactor單執行緒模型

寫這個模型需要提前了解selector以及channel,之前記錄過filechannel,除此之外還有以下幾種channel serversocketchannel 用於監聽新的tcp連線的通道,負責讀取 響應,通常用於服務端的實現。socketchannel 用於發起tcp連線,讀寫網路中的資料...