Android Handler研究(1)
a. 解決問題
跨線程通信(UI線程)
b. 用途
1. 延時執行message或runnable
2. 子線程執行耗時操作
c. 原理
Message: 消息實體
MessageQueue: 消息隊列
Looper: 輪詢消息隊列
d. 註意點
1. UI線程Handler如何初始化的
ActivityThread的static main方法中執行Looper.prepareMainLooper();
2. 任意線程實現消息隊列
new Thread(){
run(){
//1. 準備Looper對象
Looper.prepare();
//2. 子線程創建Handler
handler = new Handler(){
handlerMessage(){
}
}
//3. 輪詢方法
Lopper.loop();
}
}.start();
3. 為什麽主線程不會因為Looper.loop()死循環卡死?
利用Linux管道(Pipe/epoll),簡單說就是在主線程的MessageQueue沒有消息時,便阻塞在loop的messageQueue.next()中的nativePollOnce()方法裏.
所以說,主線程大多數時候處於休眠狀態,不會消耗大量cpu資源
Android Handler研究(1)