用通俗易懂的話來闡述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...