Handler系列-Message是怎么重復利用的

1.Message類的支持

  • 使用鏈表來緩存Message,sPool為表頭;
  • 最多能緩存50個Message;
  • sPoolSync用來保證讀寫鏈表的安全;
public final class Message implements Parcelable {private static Message sPool; //緩存的列表表頭/*package*/ Message next;private static final Object sPoolSync = new Object();private static int sPoolSize = 0;//當前緩存的Message的個數private static final int MAX_POOL_SIZE = 50; //最多只能緩存50個Message
}

?2.獲得消息

  • 返回表頭的Message,將下一個消息更新為新的表頭;
public final class Message implements Parcelable {public static Message obtain() {synchronized (sPoolSync) {//加鎖,線程安全if (sPool != null) {Message m = sPool;//獲得表頭sPool = m.next; //更新表頭m.next = null; //將返回的Message的next重置m.flags = 0; // clear in-use flagsPoolSize--; //更新緩存的Message數量return m;}}return new Message(); //不然新建一個}
}

3.緩存消息

  • 在Looper里面執行消息;
  • 執行完消息后,將Message緩存;
public final class Looper {public static void loop() {for (;;) {Message msg = queue.next();if (msg == null) {return;}msg.target.dispatchMessage(msg); //執行Messagemsg.recycleUnchecked(); //執行消息回收          }}
}
  • 執行消息回收;
void recycleUnchecked() {// Mark the message as in use while it remains in the recycled object pool.// Clear out all other details.//重置所有屬性flags = FLAG_IN_USE;what = 0;arg1 = 0;arg2 = 0;obj = null;replyTo = null;sendingUid = -1;when = 0;target = null;callback = null;data = null;synchronized (sPoolSync) {//加鎖if (sPoolSize < MAX_POOL_SIZE) {//只能緩存50個消息next = sPool; //每次執行完消息后,放這條消息放到頭部sPool = this;//更換表頭sPoolSize++;}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

98、Text2Room: Extracting Textured 3D Meshes from 2D Text-to-Image Models

簡介 github 利用預訓練的2D文本到圖像模型來合成來自不同姿勢的一系列圖像。為了將這些輸出提升為一致的3D場景表示&#xff0c;將單目深度估計與文本條件下的繪畫模型結合起來&#xff0c;提出了一個連續的對齊策略&#xff0c;迭代地融合場景幀與現有的幾何形狀&#xff0…

#Js篇:單線程模式同步任務異步任務任務隊列事件循環setTimeout() setInterval()

單線程模式 之所以采用單線程&#xff0c;而不是多線程&#xff0c;跟歷史有關系。原因是不想讓瀏覽器變得太復雜&#xff0c;因為多線程需要共享資源、且有可能修改彼此的運行結果&#xff0c;對于一種網頁腳本語言來說&#xff0c;太復雜了。 好處 實現起來比較簡單&#…

nginx國密ssl測試

文章目錄 文件準備編譯部署nginx申請國密數字證書配置證書并測試 文件準備 下載文件并上傳到服務器&#xff0c;這里使用centos 7.8 本文涉及的程序文件已打包可以直接下載。 點擊下載 下載國密版openssl https://www.gmssl.cn/gmssl/index.jsp 下載穩定版nginx http://n…

訪問者模式 (Visitor Pattern)

定義 訪問者模式&#xff08;Visitor Pattern&#xff09;是一種行為型設計模式&#xff0c;用于將算法與其作用于的對象結構分離。這種模式主要用于執行操作或應用過程&#xff0c;這些操作需要在不同類型的對象上執行&#xff0c;同時避免讓這些對象的類變得過于復雜。 關鍵…

【Python 訓練營】N_5 斐波那契數列

題目 輸出斐波那契數列 分析 斐波那契數列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又稱黃金分割數列&#xff0c;指的是這樣一個數列&#xff1a;0、1、1、2、3、5、8、13、21、34、……。 在數學上&#xff0c;費波那契數列是以遞歸的方法來定義&#xff…

9.9 Windows驅動開發:內核遠程線程實現DLL注入

在筆者上一篇文章《內核RIP劫持實現DLL注入》介紹了通過劫持RIP指針控制程序執行流實現插入DLL的目的&#xff0c;本章將繼續探索全新的注入方式&#xff0c;通過NtCreateThreadEx這個內核函數實現注入DLL的目的&#xff0c;需要注意的是該函數在微軟系統中未被導出使用時需要首…

用XMind2TestCase,測試更輕松

&#x1f4e2;專注于分享軟件測試干貨內容&#xff0c;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01;&#x1f4e2;交流討論&#xff1a;歡迎加入我們一起學習&#xff01;&#x1f4e2;資源分享&#xff1a;耗時200小時精選的「軟件測試」資…

C++ Qt QByteArray用法介紹

作者:令狐掌門 技術交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目錄 一、QByteArray的基本用法1、初始化和賦值2、訪問和修改元素3、 常用方法4、數據轉換二、QByteArray與文件操作三、QByteArray與網絡編程四、QByteArray數據編碼1、Base64 編解…

數據庫-MySQL之數據庫必知必會10-13章

第10章 創建計算字段 拼接字段 使用Concat()函數 執行算術計算 示例&#xff1a;從 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一個包含促銷價格的計算字段。提示&#xff1a;可以乘以 0.9&#xff0c;得到原價的 90%&#xff08;即 10%的折扣&…

2023.11.24 海豚調度,postgres庫使用

目錄 海豚調度架構dolphinscheduler DAG(Directed Acyclic Graph)&#xff0c; 個人自用啟動服務 DS的架構(海豚調度) 海豚調度架構dolphinscheduler 注:需要先開啟zookeeper服務,才能進行以下操作 通過UI進行工作流的配置操作, 配置完成后, 將其提交執行, 此時執行請求會被…

數組基礎知識

數組基礎&#xff08;不定時更新&#xff09; 數組基礎 數組基礎 &#xff08;1&#xff09;數組是存放在連續內存空間上的相同類型數據的集合。數組可以方便的通過下標索引的方式獲取到下標下對應的數據。數組下標都是從0開始的。數組內存空間的地址是連續的。 &#xff08;…

【科普知識】什么是步進電機?

德國百格拉公司于1973年發明了五相混合式步進電機及其驅動器&#xff0c;1993年又推出了性能更加優越的三相混合式步進電機。我國在80年代以前&#xff0c;一直是反應式步進電機占統治地位&#xff0c;混合式步進電機是80年代后期才開始發展。 步進電機是一種用電脈沖信號進行…

Verilog基礎:時序調度中的競爭(一)

相關閱讀 Verilog基礎https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作為一個硬件描述語言&#xff0c;Verilog HDL常常需要使用語句描述并行執行的電路&#xff0c;但其實在仿真器的底層&#xff0c;這些并行執行的語句是有先后順序…

機器學習數據集整理:圖像、表格

前言 如果你對這篇文章感興趣&#xff0c;可以點擊「【訪客必讀 - 指引頁】一文囊括主頁內所有高質量博客」&#xff0c;查看完整博客分類與對應鏈接。 表格數據 Sklearn 提供了 13 個表格型數據&#xff0c;且數據處理接口統一&#xff1b;LIBSVM 提供了 131 個表格型數據&a…

【TypeScript】常見數據結構與算法(二):鏈表

文章目錄 鏈表結構&#xff08;LinkedList&#xff09;鏈表以及數組的缺點數組鏈表的優勢 什么是鏈表?封裝鏈表相關方法源碼鏈表常見面試題237-刪除鏈表中的節點206 - 反轉鏈表 數組和鏈表的復雜度對比 鏈表結構&#xff08;LinkedList&#xff09; 鏈表以及數組的缺點 鏈表…

AcWing103.電影——離散化

題目 莫斯科正在舉辦一個大型國際會議&#xff0c;有 n n n 個來自不同國家的科學家參會。 每個科學家都只懂得一種語言。 為了方便起見&#xff0c;我們把世界上的所有語言用 1 到 109 之間的整數編號。 在會議結束后&#xff0c;所有的科學家決定一起去看場電影放松一下。…

Interactive Visual Data Analysis

Words&Contents Home | Interactive Visual Data Analysis Book Outline 這本書對視覺、互動和分析方法進行了系統而全面的概述&#xff0c;作為數據可視化方面比較好的讀物&#xff1b; 目錄 Words&Contents Book Outline &#xff08;一&#xff09;Introduct…

AIGC 3D即將爆發,混合顯示成為產業數字化的生產力平臺

2023年&#xff0c;大語言模型與生成式AI浪潮席卷全球&#xff0c;以文字和2D圖像生成為代表的AIGC正在全面刷新產業數字化。而容易為市場所忽略的是&#xff0c;3D圖像生成正在成為下一個AIGC風口&#xff0c;AIGC 3D宇宙即將爆發。所謂AIGC 3D宇宙&#xff0c;即由文本生成3D…

VBA_MF系列技術資料1-227

MF系列VBA技術資料 為了讓廣大學員在VBA編程中有切實可行的思路及有效的提高自己的編程技巧&#xff0c;我參考大量的資料&#xff0c;并結合自己的經驗總結了這份MF系列VBA技術綜合資料&#xff0c;而且開放源碼&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04屬于定…

安裝compiler version 5

這個compiler version5 在我的資源里面可以免費下載&#xff1b; 另外這個東西還需要安裝&#xff0c;安裝教程在這里&#xff1a;Keil最新版保姆教程&#xff08;解決缺少V5編譯器問題&#xff09; - 嗶哩嗶哩 (bilibili.com) 看吧安裝好了year