Handler 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
處理器允許你傳送並處理 Message 與執行緒 . 相關聯的可執行物件 MessageQueue。
[Android.Runtime.Register("android/os/Handler", DoNotGenerateAcw=true)]
public class Handler : Java.Lang.Object
[<Android.Runtime.Register("android/os/Handler", DoNotGenerateAcw=true)>]
type Handler = class
inherit Object
- 繼承
- 衍生
- 屬性
備註
處理器允許你傳送並處理 Message 與執行緒 . 相關聯的可執行物件 MessageQueue。 每個處理程序實例都與單一執行緒及其訊息佇列相關聯。 當你建立新的 Handler 時,它會綁定到 Looper。 它會將訊息和可執行程式傳送到該 Looper 的訊息佇列,並在該 Looper 的執行緒中執行。
處理器有兩個主要用途:(1) 排程未來某個時間點執行的訊息與可執行物件;以及 (2) 將執行任務排隊到與你執行的執行緒不同。
排程訊息透過 #post、 #postAtTime(Runnable, long)、 #postDelayed#sendEmptyMessage#sendMessage#sendMessageAtTime和 #sendMessageDelayed 方法來完成。 em post/em< 版本允許你為可執行的物件排隊,當訊息佇列收到時呼叫它們;>em<sendMessage>/em< 版本允許你為包含一包資料的物件排隊>,該資料將由 Handler < 的方法處理(需要實作 Handler 的子類別)。>Message#handleMessage
在發送或發送給處理器時,你可以選擇在訊息佇列準備好時就讓項目被處理,或指定處理前的延遲或絕對處理時間。 後兩者允許你實作逾時、tick 及其他基於時間的行為。
當你的應用程式建立一個程序時,其主執行緒會專門執行訊息佇列,負責管理頂層應用程式物件(活動、廣播接收器等)及其所建立的任何視窗。 你可以建立自己的執行緒,並透過處理器與主應用程式執行緒溝通。 這是透過呼叫與之前相同的 <em>post</em> 或 <em>sendMessage</em> 方法來完成,但來自你的新串。 該可執行或訊息會被排程進入處理器的訊息佇列,並在適當時處理。
<h2>使用 Handler</h2 時的效能考量>
請注意,這些 Handler 「has」和「remove」方法可能非常緩慢,因為這些操作會掃描整個待處理訊息的隊列。 如果底層 Looper的 s MessageQueue 有許多待處理訊息,這可能會很昂貴。
<ul><li>與其移除訊息或回撥來取消待處理的操作,不如設定一個旗標表示取消,並讓操作在繼續前檢查該旗標。 <li>與其檢查佇列是否有訊息或回調來判斷待處理的操作是否尚未發生,不如考慮讓該操作設定一個旗標,表示該操作已開始。 </ul>
請參閱 java.util.concurrent 標準並行原語。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| Handler() |
預設建構子會將此處理器與當前執行緒的 關聯 |
| Handler(Action<Message>) |
初始化一個新的 Handler 類別實例。 |
| Handler(Handler+ICallback) |
建構子會將此處理器與 Looper 當前執行緒的 關聯,並採用回調介面,在那裡你可以處理訊息。 |
| Handler(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
| Handler(Looper, Handler+ICallback) |
使用提供的 Looper 介面代替預設,並採用回調介面來處理訊息。 |
| Handler(Looper) |
請使用提供的 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
處理器允許你傳送並處理 |
| JniPeerMembers |
提供此類型的 JNI 同儕成員元資料。 |
| Looper |
會得到 Looper 的值。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
| 名稱 | Description |
|---|---|
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
處理器允許你傳送並處理 |
| CreateAsync(Looper, Handler+ICallback) |
建立一個新的處理器,其發布的訊息與可執行程式不受同步障礙(如顯示垂直同步)影響。 |
| CreateAsync(Looper) |
建立一個新的處理器,其發布的訊息與可執行程式不受同步障礙(如顯示垂直同步)影響。 |
| DispatchMessage(Message) |
這裡處理系統訊息。 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
處理器允許你傳送並處理 |
| Dump(IPrinter, String) |
將這個物件的狀態寫入所提供的輸出。 |
| DumpAsync(IPrinter, String) |
非同步執行相應的操作。 |
| Equals(Object) |
處理器允許你傳送並處理 |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| GetMessageName(Message) |
回傳代表指定訊息名稱的字串。 |
| HandleMessage(Message) |
子類別必須實作此功能才能接收訊息。 |
| HasCallbacks(IRunnable) |
檢查訊息佇列中是否有回覆 r 的待處理貼文。 |
| HasMessages(Int32, Object) |
檢查訊息佇列中是否有代碼為「what」且目標為「object」的待處理訊息貼文。 |
| HasMessages(Int32) |
檢查訊息佇列中是否有包含代碼「what」的待發訊息貼文。 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| ObtainMessage() |
從全域訊息池回傳新訊息 |
| ObtainMessage(Int32, Int32, Int32, Object) |
與 |
| ObtainMessage(Int32, Int32, Int32) |
與 |
| ObtainMessage(Int32, Object) |
與 |
| ObtainMessage(Int32) |
與 |
| Post(Action) |
將可執行的程式加入該處理器的訊息佇列。 |
| Post(IRunnable) |
會讓可執行的 r 被加入訊息佇列。 |
| PostAtFrontOfQueue(Action) |
會發布該處理器訊息佇列的下一次迭代的可執行檔案。 |
| PostAtFrontOfQueue(IRunnable) |
向實作 Runnable 的物件發布訊息。 |
| PostAtTime(Action, Int64) |
會發布可跑的遊戲,讓玩家在指定的正常運作時間內運行。 |
| PostAtTime(Action, Object, Int64) |
會發布可跑的遊戲,讓玩家在指定的正常運作時間內運行。 |
| PostAtTime(IRunnable, Int64) |
會將可跑的 r 加入訊息佇列,並於 var<uptimeMillis>/var< 指定>的特定時間執行。 |
| PostAtTime(IRunnable, Object, Int64) |
會將可跑的 r 加入訊息佇列,並於 var<uptimeMillis>/var< 指定>的特定時間執行。 |
| PostDelayed(Action, Int64) |
在指定延遲後發布可執行的可執行物件。 |
| PostDelayed(IRunnable, Int64) |
會將可執行的 r 加入訊息佇列,並在指定時間後執行。 |
| PostDelayed(IRunnable, Object, Int64) |
會將可執行的 r 加入訊息佇列,並在指定時間後執行。 |
| RemoveCallbacks(Action, Object) |
移除指定可執行物件的待回調。 |
| RemoveCallbacks(Action) |
移除指定可執行物件的待回調。 |
| RemoveCallbacks(IRunnable, Object) |
移除訊息隊列中任何 Runnable <var><> 與 Object <var>token</var> 的待發貼文。 |
| RemoveCallbacks(IRunnable) |
移除留言佇列中 Runnable r 待處理的貼文。 |
| RemoveCallbacksAndMessages(Object) |
移除所有待處理的回撥貼文,以及發送 var obj</var> 為 <var>token</var> 的訊息<。> |
| RemoveMessages(Int32, Object) |
移除訊息佇列中包含代碼為「what」且目標為「object」的待發訊息。 |
| RemoveMessages(Int32) |
移除訊息佇列中帶有代碼「what」的待發訊息貼文。 |
| SendEmptyMessage(Int32) |
發送僅包含 what 值的訊息。 |
| SendEmptyMessageAtTime(Int32, Int64) |
發送只包含「什麼」值的訊息,並指定於特定時間送達。 |
| SendEmptyMessageDelayed(Int32, Int64) |
發送僅包含「what」值的訊息,並在指定時間後交付。 |
| SendMessage(Message) |
在所有待處理訊息之後,將訊息推送到訊息隊列的末端。 |
| SendMessageAtFrontOfQueue(Message) |
將訊息排隊列在訊息佇列的最前端,待在訊息迴圈的下一次迭代中處理。 |
| SendMessageAtTime(Message, Int64) |
在所有待處理訊息後,將訊息排隊到訊息隊列,且在絕對時間(以毫秒為單位)<>之前,var uptimeMillis</var>。 |
| SendMessageDelayed(Message, Int64) |
在所有待處理訊息之後(當前時間 + 延遲毫厘)之後,將訊息排入訊息佇列。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
處理器允許你傳送並處理 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
處理器允許你傳送並處理 |
| IJavaPeerable.Finalized() |
處理器允許你傳送並處理 |
| IJavaPeerable.JniObjectReferenceControlBlock |
處理器允許你傳送並處理 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
處理器允許你傳送並處理 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
處理器允許你傳送並處理 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
處理器允許你傳送並處理 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
處理器允許你傳送並處理 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |