日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Android消息机制学习笔记

發布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android消息机制学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android的消息機制主要是指Handler的運行機制,Handler的運行需要底層的MessageQueue和Looper的支撐;

MessageQueue:消息隊列,它的內存存儲了一組消息,以隊列的形式對外提供插入和刪除的工作,內部結構:采用

單鏈表的數據結構來存儲消息隊列;

Looper:處理MessageQueue的消息,會以無限循環的形式去查找是否有新消息,有就處理無則等待,還要用到一個特殊的概念-ThreadLocal:并不是線程,作用:可以在每個線程中存儲數據,

ThreadLocal可以在不同的線程中互不干擾地存儲并提供數據,通過ThreadLocal可以輕松獲取每個線程的Looper。線程默認是沒有Looper的,如果需要使用Handler就必須為線程創建Looper;

UI線程即ActivityThread,ActivityThread被創建是就會初始化Looper,這也是在主線程中默認可以使用Handler的原因。

?

Handler創建完畢后,Looper和MessageQueue、Handler就可以一起協同工作了,1.通過Handler的post方法將一個Runnable投遞到Handler內部的Looper中取處理

2.通過Handler的send方法發送一個消息,這個消息同樣會在Looper中去處理;其中post方法最終也是通過send方法來完成;

send的過程:當Handler的send方法被調用時,它會調用MessageQueue的enqueueMessage方法將這個消息放入消息隊列中,然后Looper發現有新的到來時,就會處理這個消息,

最終消息中的Runnable或者Handler的handleMessage方法就會被調用。注意Looper是運行在創建Handler所在的線程中的,這樣一來Handler中的業務邏輯就被切換到創建Handler所在的

線程中去執行了。

?Message的callback是一個Runnable對象,實際上就是Handler的post方法所傳遞的Runnable參數

Handler的工作原理

Handler工作主要包含消息的發送和接收過程,通過post的一系列方法以及send的一系列方法來實現,而post方法最總是通過send的一系列方法來實現的。

Handler最總會交給dispatchMessage方法調用,而檢查的Message的Callback實際上是Handler的post方法所傳遞的Runnable參數

Callback可以代替創建Hander的實例而去使用handler

Handler是必須通過Looper來構造Handler.

public void dispatchMessage(Message msg){if(msg.callback != null){ //當message是runnable的情況,也就是Handler的post方法傳遞的參數,這種情況下直接執行runnable的run方法 handleCallback(msg); } else { if(mCallback != null){{//如果創建Handler的時候是給Handler設置了Callback接口的實現,那么此時調用該實現的handleMessage方法 if(mCallback.handleMessage(msg)){ return; } } handleMessage(msg);//如果是派生Handler的子類,就要重寫handleMessage方法,那么此時就是調用子類實現的handleMessage方法 } }
public Handler(Looper looper){this(looper, null, false); }

轉載于:https://www.cnblogs.com/banzhuan/p/6853391.html

總結

以上是生活随笔為你收集整理的Android消息机制学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。