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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )

發(fā)布時(shí)間:2025/6/17 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、Handler 發(fā)送與處理消息 ( 兩大功能 )
  • 二、Handler 初始化
  • 三、完整 Handler 代碼





一、Handler 發(fā)送與處理消息 ( 兩大功能 )



Handler 有兩個(gè)功能 :

功能一 : 發(fā)送消息到 Looper 中的 消息隊(duì)列 MessageQueue 中 ;

/*** 發(fā)送消息* @param msg*/public void sendMessage(Message msg){// 為消息設(shè)置發(fā)送的 Handlermsg.target = this;// 向消息隊(duì)列中放入要執(zhí)行的消息mQueue.enqueueMessage(msg);}

功能二 : 接收 Looper 中的 loop 方法傳來的 Message , 并 執(zhí)行該 Message 代表的任務(wù) ;


Handler 執(zhí)行 Message 任務(wù) , 具體的執(zhí)行邏輯需要 用戶實(shí)現(xiàn) ; 用戶創(chuàng)建 Handler 時(shí) , 需要覆蓋 handleMessage 方法 , 在重寫的方法中處理不同的 Message 任務(wù) ;

/*** 執(zhí)行消息對應(yīng)的任務(wù)* @param next*/public void handleMessage(Message next) {}



二、Handler 初始化



Handler 初始化 :

Handler 的功能一 發(fā)送消息 , 就是向 消息隊(duì)列 MessageQueue 中發(fā)送消息 , 并將消息放到 MessageQueue 中的 Message 鏈表隊(duì)列的最后一個(gè) ;

這就需要 Handler 持有 消息隊(duì)列 MessageQueue 的引用 ,

消息隊(duì)列封裝在 Looper 中 , 因此需要先拿到 線程本地變量 Looper , 然后從 Looper 中獲取對應(yīng)的消息隊(duì)列 ;


這里就需要特別注意 , 在初始化 Handler 時(shí) , 需要用到 Looper , 如果 Looper 為空 , Handler 初始化就會失敗 ;

因此在 創(chuàng)建 Handler 之前 , 必須先調(diào)用 Looper 的 prepare 方法 , 先將 Looper 進(jìn)行初始化操作 ;


/*** 消息隊(duì)列* 該消息隊(duì)列封裝在 Looper 中* Looper 封裝在線程本地變量中*/MessageQueue mQueue;public Handler(){/*在 Handler 中需要拿到 Looper進(jìn)而拿到 Looper 中的 MessageQueue 消息隊(duì)列Handler 的操作就是將 Message 放入 MessageQueue因此在 Handler 中需要持有 MessageQueue 消息隊(duì)列的引用獲取 Looper 時(shí) , Looper 必須已經(jīng)初始化完畢,也就是已經(jīng)調(diào)用過 prepare 創(chuàng)建了 Looper 并將其放入了線程本地變量*/// 獲取當(dāng)前線程中的 線程本地變量 LooperLooper looper = Looper.looper();// 獲取封裝在 Looper 中的 消息隊(duì)列 MessageQueuemQueue = looper.mQueue;}



三、完整 Handler 代碼



package kim.hsl.handler;public class Handler {/*** 消息隊(duì)列* 該消息隊(duì)列封裝在 Looper 中* Looper 封裝在線程本地變量中*/MessageQueue mQueue;public Handler(){/*在 Handler 中需要拿到 Looper進(jìn)而拿到 Looper 中的 MessageQueue 消息隊(duì)列Handler 的操作就是將 Message 放入 MessageQueue因此在 Handler 中需要持有 MessageQueue 消息隊(duì)列的引用獲取 Looper 時(shí) , Looper 必須已經(jīng)初始化完畢,也就是已經(jīng)調(diào)用過 prepare 創(chuàng)建了 Looper 并將其放入了線程本地變量*/// 獲取當(dāng)前線程中的 線程本地變量 LooperLooper looper = Looper.looper();// 獲取封裝在 Looper 中的 消息隊(duì)列 MessageQueuemQueue = looper.mQueue;}/*** 發(fā)送消息* @param msg*/public void sendMessage(Message msg){// 為消息設(shè)置發(fā)送的 Handlermsg.target = this;// 向消息隊(duì)列中放入要執(zhí)行的消息mQueue.enqueueMessage(msg);}/*** 執(zhí)行消息對應(yīng)的任務(wù)* @param next*/public void handleMessage(Message next) {} }

總結(jié)

以上是生活随笔為你收集整理的【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。