## 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ì)象的字符串表示形式。