Handler 官方文檔翻譯

## Handler 簡介(全文基于 API 27)

public class Handler

extends Object

它的子類有:

AsyncQueryHandler, AsyncQueryHandler.WorkerHandler, HttpAuthHandler, SslErrorHandler

Handler 允許您發(fā)送和處理與線程的MessageQueue相關(guān)聯(lián)的消息和可運(yùn)行對(duì)象。每個(gè)Handler實(shí)例都與單個(gè)線程和該線程的消息隊(duì)列相關(guān)聯(lián)。當(dāng)您創(chuàng)建一個(gè)新的Handler時(shí),它被綁定到創(chuàng)建它的線程/消息隊(duì)列-從那時(shí)起,它將把消息和運(yùn)行程序傳遞到消息隊(duì)列中,并在它們從消息隊(duì)列中取出來時(shí)執(zhí)行它們。

處理程序有兩個(gè)主要用途: (1) 為 messages 和 runnables 未來的調(diào)用制定計(jì)劃;(2) 為不同線程上的操作排序。

通過如下方法調(diào)度Message:

????post(Runnable), postAtTime(Runnable, long),?

????postDelayed(Runnable, Object, long),?

????sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long),?

????and sendMessageDelayed(Message, long)

post 版本允許您在接收到消息隊(duì)列時(shí)排序可運(yùn)行的對(duì)象。sendMessage 版本允許您排序一個(gè) Message 對(duì)象, 這個(gè)對(duì)象包含將由

handler的 handleMessage (Message) 方法處理的數(shù)據(jù)包 (要求您實(shí)現(xiàn)Handler的子類)。

在傳遞或發(fā)送到 Handler 前, 您可以允許在消息隊(duì)列準(zhǔn)備就緒后立即處理該項(xiàng), 或者在處理之前指定延遲, 或?qū)⑵涮幚頌榻^對(duì)時(shí)間。 后兩個(gè)允許您實(shí)現(xiàn)超時(shí)、定時(shí)和其他基于計(jì)時(shí)的行為。

為應(yīng)用程序創(chuàng)建進(jìn)程時(shí), 其主線程專用于運(yùn)行一個(gè)消息隊(duì)列, 負(fù)責(zé)管理頂級(jí)應(yīng)用程序?qū)ο?(活動(dòng)、廣播接收器等) 及其創(chuàng)建的任何窗口。您可以創(chuàng)建自己的線程, 并通過處理程序與主應(yīng)用程序線程進(jìn)行通信。這是通過調(diào)用與以前相同的 post 或 sendMessage 方法, 而是從新線程中完成的。然后, 將在處理程序的消息隊(duì)列中計(jì)劃給定的可運(yùn)行或消息, 并在適當(dāng)時(shí)進(jìn)行處理。

##Handler的四個(gè)構(gòu)造方法:

>*如果該線程沒有一個(gè) Looper,這個(gè) handler 將無法接收消息,因此拋出異常。*

-?Handler()

- 默認(rèn)的構(gòu)造器,將當(dāng)前線程的 handler 與 Looper 相關(guān)聯(lián)

-?Handler(Handler.Callback callback)

- 多了一個(gè)回調(diào)接口,用來處理回調(diào)的 messages

-?Handler(Looper looper)

- 用提供的 looper 代替默認(rèn)的

-?Handler(Looper looper, Handler.Callback callback)

- 回調(diào) looper 和 messages

## Handler 的公共方法:

-?static Handler createAsync(Looper looper, Handler.Callback callback)

-??創(chuàng)建一個(gè)新的處理程序, 其發(fā)布的 messages 和 runnables 不受同步屏障 (如顯示 vsync) 的限制。

-?static Handler createAsync(Looper looper)

- 創(chuàng)建一個(gè)新的處理程序, 其發(fā)布的 messages 和 runnables 不受同步屏障 (如顯示 vsync) 的限制。

-?void?????dispatchMessage(Message msg)

- 在這里處理 message 消息

-?final void?????dump(Printer pw, String prefix)

-?final Looper?????getLooper()

-?String?????getMessageName(Message message)

- 返回表示指定消息名稱的字符串

-?void?????handleMessage(Message msg)

-??子類必須實(shí)現(xiàn)此項(xiàng)才能接收消息。

-?final boolean?????hasMessages(int what)

- 檢查是否有帶有 ‘what’ 屬性的 messages 發(fā)布

-?final boolean?????hasMessages(int what, Object object)

- 檢查是否有帶有 ‘what’ 屬性并且其 obj 是 ‘object’ 的 messages 發(fā)布

-?final Message?????obtainMessage(int what, Object obj)

-??與 obtainMessage () 相同, 只是它還設(shè)置返回消息的內(nèi)容和 obj 成員。

-?final Message?????obtainMessage()

-??從全局消息池返回新消息。

-?final Message?????obtainMessage(int what, int arg1, int arg2)

- 與 obtainMessage () 相同, 只是它還設(shè)置返回消息的內(nèi)容、arg1 和 arg2 成員。

-?final Message?????obtainMessage(int what, int arg1, int arg2, Object obj)

-??與 obtainMessage () 相同, 只是它還設(shè)置返回消息上的 arg1,and arg2 值。

-?final Message?????obtainMessage(int what)

-??與 obtainMessage () 相同, 只是它還設(shè)置了返回消息的成員。

-?final boolean?????post(Runnable r)

-??使可運(yùn)行的 r 添加到消息隊(duì)列中。

-?final boolean?????postAtFrontOfQueue(Runnable r)

-??向?qū)崿F(xiàn)可運(yùn)行的對(duì)象發(fā)送消息。

-?final boolean?????postAtTime(Runnable r, long uptimeMillis)

-??使可運(yùn)行的 r 被添加到消息隊(duì)列中, 以便在 uptimeMillis 給定的特定時(shí)間執(zhí)行。

-?final boolean?????postAtTime(Runnable r, Object token, long uptimeMillis)

- 使可運(yùn)行的 r 被添加到消息隊(duì)列中, 以便在 uptimeMillis 給定的特定時(shí)間執(zhí)行。

-?final boolean?????postDelayed(Runnable r, long delayMillis)

-??使可運(yùn)行的 r 被添加到消息隊(duì)列中, 以便在經(jīng)過指定的時(shí)間后執(zhí)行。

-?final boolean?????postDelayed(Runnable r, Object token, long delayMillis)

-??使可運(yùn)行的 r 被添加到消息隊(duì)列中, 以便在經(jīng)過指定的時(shí)間后執(zhí)行。

-?final void?????removeCallbacks(Runnable r)

- 移除消息隊(duì)列中等待的 Runnable 對(duì)象 r

-?final void?????removeCallbacks(Runnable r, Object token)

- 移除消息隊(duì)列中等待的帶有 token 的 Runnable 對(duì)象 r

-?final void?????removeCallbacksAndMessages(Object token)

-??刪除所有待處理的回調(diào)帖子并發(fā)送其 obj 為令牌的消息。

-?final void?????removeMessages(int what)

- 移除所有帶有 what 參數(shù)的 等待中的 messages

-?final void?????removeMessages(int what, Object object)

- 移除所有帶有 what 參數(shù)及 object 參數(shù)的 等待中的 messages

-?final boolean?????sendEmptyMessage(int what)

-??發(fā)送空的消息。

-?final boolean?????sendEmptyMessageAtTime(int what, long uptimeMillis)

- 在指定時(shí)間發(fā)送只包含 what 參數(shù)的空消息。

-?final boolean?????sendEmptyMessageDelayed(int what, long delayMillis)

- 在延遲指定時(shí)間之后發(fā)送只包含 what 參數(shù)的空消息。

-?final boolean?????sendMessage(Message msg)

- 將 message 推送到當(dāng)前消息隊(duì)列的末尾

-?final boolean?????sendMessageAtFrontOfQueue(Message msg)

- 將 message 推送到當(dāng)前消息隊(duì)列的首位

-?boolean?????sendMessageAtTime(Message msg, long uptimeMillis)

- 將 message 在指定時(shí)間 uptimeMillis 推送到消息隊(duì)列中

-?final boolean?????sendMessageDelayed(Message msg, long delayMillis)

- 將 message 在延遲指定時(shí)間 delayMillis 之后推送到消息隊(duì)列中

-?String?????toString()

-??返回對(duì)象的字符串表示形式。

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

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

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