1.簡介
Framework 作為 Android 框架層,為 App 提供了眾多 API 去調(diào)用 ,但是很多機制都是 Framework 包裝好了給 App 來用的。 Framework始終穿插在 App 整個研發(fā)生命周期中,不管是從 0 到 1 的建立階段,還是從 1 到 N 打磨階段,都離不開Framework。
2.簡介 Handler
Handler機制的相關(guān)類
1.Hanlder:發(fā)送和接收消息
2.Looper:用于輪詢消息隊列,一個線程只能有一個Looper
3.Message: 消息實體
4.MessageQueue: 消息隊列用于存儲消息和管理消息創(chuàng)建Looper
1.創(chuàng)建Looper的方法是調(diào)用Looper.prepare() 方法
2.在main方法中 Looper.prepareMainLooper() 后Looper.loop(); 開始輪詢創(chuàng)建MessageQueue以及Looper與當(dāng)前線程的綁定
Looper.loop() – 創(chuàng)建Handler – 創(chuàng)建Message – Message和Handler的綁定
1.最常見的創(chuàng)建handler Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
在內(nèi)部調(diào)用 this(null, false);
2.可以直接new Message 但是有更好的方式 Message.obtain。因為可以檢查是否有可以復(fù)用的Message,用過復(fù)用避免過多的創(chuàng)建、銷
毀Message對象達到優(yōu)化內(nèi)存和性能的目地Handler發(fā)送消息
1.Handler發(fā)送消息的重載方法很多,但是主要只有2種。 sendMessage(Message) sendMessage方法通過一系列重載方法的調(diào)用,
sendMessage調(diào)用sendMessageDelayed,繼續(xù)調(diào)用sendMessageAtTime,繼續(xù)調(diào)用enqueueMessage,繼續(xù)調(diào)用messageQueue的
enqueueMessage方法,將消息保存在了消息隊列中,而最終由Looper取出,交給Handler的dispatchMessage進行處理Handler處理消息
在handleMessage(Message)方法中,我們可以拿到message對象,根據(jù)不同的需求進行處理,整個Handler機制的流程就結(jié)束了
3.小結(jié)
handler.sendMessage 發(fā)送消息到消息隊列MessageQueue,然后looper調(diào)用自己的loop()函數(shù)帶動MessageQueue從而輪詢
messageQueue里面的每個Message,當(dāng)Message達到了可以執(zhí)行的時間的時候開始執(zhí)行,執(zhí)行后就會調(diào)用message綁定的Handler來處理消息。
handler機制就是一個傳送帶的運轉(zhuǎn)機制。
1)MessageQueue就像履帶。
2)Thread就像背后的動力,就是我們通信都是基于線程而來的。
3)傳送帶的滾動需要一個開關(guān)給電機通電,那么就相當(dāng)于我們的loop函數(shù),而這個loop里面的for循環(huán)就會帶著不斷的滾動,去輪詢messageQueue
4)Message就是 我們的貨物了