Android 系統Handler用法簡介

2021-09-01 07:11:32 字數 1280 閱讀 5111

在介紹apidemo中的service示例之前有必要對android的執行緒做個說明。

當應用啟動後,預設情況下只有乙個main thread在執行,如果應用設計得不好的話,這種單執行緒模型可能會導致應用程式效能很差。特別是如果所有的操作都發生在這個ui執行緒中,比如一些費時的操作如網路操作,資料庫訪問將會阻塞ui執行緒,造成應用程式不響應使用者輸入,嚴重的情況android將顯示anr (應用程式無響應)對應框,強制應用程式退出。

使用工作執行緒時如果需要更新ui ,需要注意的是,目前大部分系統ui 都是設計成單執行緒模式的,也就是說ui 元件定義的操作不是」thread -safe」的,不能直接在非ui執行緒(如工作執行緒)中更新ui。幸運的是android系統提供多種類或方法來實現從非ui執行緒中更新ui:

這裡稍微詳細介紹一下handler 其它幾種都比較好理解。 可以參見android簡明開發教程十九:執行緒 bezier曲線。

android 在每個建立的thread都可以有個與之關聯的message queue,如果在這個thread中建立handler 物件,這個handler 物件可以用來向建立它的thread的message queue傳送訊息。比如在main thread(ui thread)建立的handler 可以用來個ui執行緒傳送訊息。

handler 定義兩類操作:

private handler mhandler = new handler();
mhandler 定義在 advancedpreferences ,advancedpreferences 為preferenceactivity的子類 (ui元件), mhandler 因此與ui thread 的message queue關聯,可以用來給ui執行緒傳送訊息或是schedule 乙個runnable 以便在 ui 執行緒中執行。

private runnable mforcecheckboxrunnable = new runnable() 

// force toggle again in a second

mhandler.postdelayed(this, 1000);

}};

上面**定義了乙個runnable 物件,其中**mhandler.postdelayed(this, 1000); 給ui執行緒message queue傳送乙個請求:每隔1秒鐘執行自己,切換mcheckboxpreference的狀態並再次請求1秒執行同樣操作。 ui 執行緒 定時從message queue中取出事件來執行 (更新 checkbox 在ui執行緒中),這樣就實現了從非ui執行緒中執行ui更新操作。

Android中的Handle基礎應用一

下面來個例子 public class myhandleactivity extends activity catch interruptedexception e system.out.println sleep over message msg new message bundle b new ...

handle 控制代碼

控制代碼是乙個32位的整數,實際上是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引。因為windows的記憶體管理經常會將空閒物件的記憶體釋放掉,當需要訪問時再重新提交到物理記憶體,所以物件的實體地址是變化的,不允許程式直接通過實體地址來訪問物件。程式將想訪問的物件的控制代碼傳遞...

控制代碼 Handle

最近在學習儲存方面的知識,第一次接觸控制代碼這樣的專業詞彙,為了更好的理解其中含義,決定開始寫部落格,慢慢成長 什麼是控制代碼?在作業系統中存在著許多的核心物件,這些物件具有許多的屬性,其中位址是比較重要的一種。作業系統在操作這些物件時,如果傳遞的是位址本身,將會帶來一系列的隱患,比如呼叫位址資訊複...