手寫簡易handler

2021-10-07 00:25:07 字數 1838 閱讀 1456

用通俗易懂的話來闡述handler在android中起到的作用

先用文字描述一下各個類的具體情況:

public

class

handler

mmessagequeue = mlooper.mmessagequeue;

}public

void

handlemessage

(message message)

public

void

sendmessage

(message message)

public

void

dispatchmessage

(message message)

}

public

class

message

public

class

messagequeue

catch

(interruptedexception e)

}/**

* 將訊息從佇列中取出

* @return

*/public message next()

catch

(interruptedexception e)

return null;

}}

public

class

looper

/** * 建立指定執行緒的looper例項

*/public

static

void

prepare()

mthreadlocal.

set(

newlooper()

);}/**

* 獲取指定執行緒的looper例項

* @return

*/public

static looper getinstance()

/** * 輪詢訊息

*/public

static

void

loop()

}}}

looper.

prepare()

;final handler handler =

newhandler()

};newthread()

}.start()

; looper.

loop()

;

我們在正常寫專案的時候,沒有去操作looper.prepare()和looper.loop(),準備和輪詢這兩個方法,是因為activitythread已經為我們準備好了。

再說一下threadlocal,threadlocal是乙個執行緒內部的儲存類,可以在指定執行緒內儲存資料,資料儲存以後,只有指定執行緒可以得到儲存資料,獲取方法就是get()和set()方法。

再用白話去描述一下整個過程:

哪個執行緒執行looper.prepare(),就在這個執行緒下儲存乙個looper物件,如果你多次執行,就會出runtime異常,這也就是我們說的乙個執行緒只有乙個looper物件,乙個looper物件管理乙個messagequeue佇列,哪個執行緒建立handler,handler就去找哪個執行緒去要那個looper物件,目的是把自己要傳送的訊息放到這個執行緒的訊息佇列中,message通過handler物件傳送了出去,同時讓message自己標記了是誰傳送的自己,looper輪詢到了這個訊息,再讓message中標記的handler物件把事件消費了。

手寫簡易springmvc框架

回顧一遍 準備工作 先寫兩個註解類 controller層的類 並寫上註解 自己寫dispatcherservlet 寫的也不是很完善 在裡面完成 init dopost web.xml配置資訊 只需要配置dispatcherservlet 然後就開始dispatcherservlet的完善 首先是...

python手寫簡易執行緒池

bin env python coding utf 8 import queue import threading from contextlib import contextmanager import time 停止事件 stopevent object class threadpool obj...

手寫簡易版Promise

在完成符合 promise a 規範的 之前,我們可以先來實現乙個簡易版promise,因為在面試中,如果你能實現出乙個簡易版的promise基本可以過關了。那麼我們先來搭建構建函式的大體框架 const pending pending const resolved resolved const r...