Android FrameWork 初探

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就是 我們的貨物了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容