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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue )

發布時間:2025/6/17 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、Looper 初始化
  • 二、Looper 遍歷消息隊列 MessageQueue
  • 三、完整 Looper 代碼





一、Looper 初始化



Looper 是 線程本地變量 , 在每個線程中 , 可以通過線程調用 ThreadLocal 變量的 get 方法獲取該線程對應的對象副本 , 調用 ThreadLocal 變量的 set 方法 , 設置該線程對應類型的對象副本 ;


Looper 調用 prepare 方法進行初始化 , 在該方法中處理 線程本地變量的先關初始化與設置 ,

如果之前已經初始化過 , 本次調用 prepare 方法是第二次調用 , 則會 拋出異常 ,

如果之前沒有初始化過 , 那么創建一個 Looper , 然后調用線程本地變量 ThreadLocal 的 set 方法 , 將該 Looper 對象設置成線程本地變量 ;

/*** 一個線程只能有一個 Looper* 使用 ThreadLocal 來保存該 Looper* 是線程內部存儲類 , 只能本線程才可以得到存儲的數據 ;*/static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<>();/*** 準備 Looper 方法*/public static void prepare(){System.out.println("prepare 創建 Looper ");// 先進行判斷 , 如果當前線程已經有了 Looper , 那就拋出異常if(sThreadLocal.get() != null){throw new RuntimeException("當前線程已存在 Looper");}// 如果不存在 Looper , 就創建一個 LoopersThreadLocal.set(new Looper());}



二、Looper 遍歷消息隊列 MessageQueue



在 Looper 線程中 , 最后一句代碼肯定是 Looper.loop() , 執行該方法后 , 就開啟了一個無限循環 ,

不斷從 消息隊列 MessageQueue 中獲取消息 , 然后發送給該 消息 Message 對應的 Handler ,

哪個 Handler 發送的消息 , 就將消息在送回給哪個 Handler ;


消息同步 : 當 消息隊列 MessageQueue 為空時 , 無法從消息隊列中獲取數據 , 此時線程會 阻塞 , 直到有新的消息到來后 , 解除阻塞 ;


Looper 循環遍歷消息隊列部分代碼 :

/*** 不斷從 消息隊列 MessageQueue 中取出 Message 消息執行*/public static void loop(){System.out.println("開始無限循環獲取 Message");// 獲取當前線程的 LooperLooper looper = Looper.looper();// 從當前線程的 Looper 獲取 消息隊列 MessageQueueMessageQueue messageQueue = looper.mQueue;// 不斷從 消息隊列中獲取 消息 , 分發到發送消息的 Handler 中執行for(;;){// 獲取消息隊列中的第一個消息Message next = messageQueue.next();// 分發到發送該消息的 Handler 中執行next.target.handleMessage(next);}}



三、完整 Looper 代碼



package kim.hsl.handler;public class Looper {/*** 一個線程只能有一個 Looper* 使用 ThreadLocal 來保存該 Looper* 是線程內部存儲類 , 只能本線程才可以得到存儲的數據 ;*/static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<>();/*** 消息隊列*/public MessageQueue mQueue;/*** Looper 構造函數*/private Looper(){mQueue = new MessageQueue();}/*** 獲取當前線程對應的 Looper* @return*/public static Looper looper(){return sThreadLocal.get();}/*** 準備 Looper 方法*/public static void prepare(){System.out.println("prepare 創建 Looper ");// 先進行判斷 , 如果當前線程已經有了 Looper , 那就拋出異常if(sThreadLocal.get() != null){throw new RuntimeException("當前線程已存在 Looper");}// 如果不存在 Looper , 就創建一個 LoopersThreadLocal.set(new Looper());}/*** 不斷從 消息隊列 MessageQueue 中取出 Message 消息執行*/public static void loop(){System.out.println("開始無限循環獲取 Message");// 獲取當前線程的 LooperLooper looper = Looper.looper();// 從當前線程的 Looper 獲取 消息隊列 MessageQueueMessageQueue messageQueue = looper.mQueue;// 不斷從 消息隊列中獲取 消息 , 分發到發送消息的 Handler 中執行for(;;){// 獲取消息隊列中的第一個消息Message next = messageQueue.next();// 分發到發送該消息的 Handler 中執行next.target.handleMessage(next);}}}

總結

以上是生活随笔為你收集整理的【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本特级黄色 | 朝桐光在线观看 | 91精品久久久久久久久久入口 | 中文字幕在线视频免费观看 | 91蜜桃传媒精品久久久一区二区 | 免费日本视频 | 久久精品小视频 | 综合色爱| 全黄毛片 | 国产成人午夜精华液 | 中文字幕亚洲乱码熟女一区二区 | 在线观看视频福利 | 久久国产经典 | 久久成人精品视频 | 国产黄色大片在线观看 | 综合激情四射 | 肮脏的交易在线观看 | 久久精品一区二区国产 | 欧美成人h版在线观看 | 国产suv精品一区二区三区 | 一本黄色片| 看av网 | 巨乳免费观看 | 欧美一级全黄 | 中文字幕高清在线 | 午夜久久久久久噜噜噜噜 | 黄色av网站免费在线观看 | 99色综合网 | 久久在线免费视频 | 国产精品情侣呻吟对白视频 | 欧美孕交视频 | 久久精品国产亚洲av无码娇色 | 荷兰av| 99热在线这里只有精品 | 亚洲精品一线二线三线 | 欧美丰满老熟妇aaaa片 | 美女交配 | 1级黄色大片儿 | 国产成人午夜视频 | 天天做天天爱天天操 | av免费不卡 | 88国产精品视频一区二区三区 | 在线观看免费高清在线观看 | 国产精品嫩草影院桃色 | 中文字幕亚洲欧美日韩在线不卡 | 女仆乖h调教跪趴1v1 | 五月激情五月婷婷 | 免费在线视频观看 | 亚欧洲精品在线视频 | 九九自拍视频 | 一级黄色片欧美 | 亚洲高清一区二区三区 | 午夜精品小视频 | 日日日干干干 | 三上悠亚中文字幕在线播放 | 韩日av一区二区 | 亲子乱aⅴ一区二区三区 | 欧美一区三区二区在线观看 | 欧洲精品久久久久毛片完整版 | 亚洲精品九九 | 国产在线一区二区三区 | 成人免费影院 | 一级片免费视频 | 超碰777 | 插我舔内射18免费视频 | 超碰狠狠干| 欧美亚洲91 | 亚洲国产精品久久久久婷婷老年 | 国产淫视频 | 久久伊人五月天 | a亚洲精品 | 日韩av自拍偷拍 | 亚洲男人天堂久久 | 乱人伦xxxx国语对白 | 欧美一区二区三区成人久久片 | 久久久精品蜜桃 | 国产黄色片免费 | 中文字幕成人av | 国内久久久 | 自拍偷拍亚洲天堂 | 亚洲av无码专区在线 | 97超碰碰| 国产嫩草影院久久久久 | 91免费在线观看网站 | 国产又粗又猛又爽又黄 | 亚洲天堂免费看 | 四虎影院在线看 | 综合av一区 | 精品电影一区二区 | 久久色在线 | 亚洲免费精品视频在线观看 | 久久久久久久久久久久久久国产 | 黄色大片视频 | 少妇脱了内裤让我添 | 欧日韩av| 久久久免费网站 | 日韩v欧美 | 国产av无码专区亚洲av毛片搜 | 亚洲精品成人无码熟妇在线 |