android Handler 機制研究學習筆記

2021-09-21 03:28:59 字數 2418 閱讀 4943

為了,更好的了解handler的機制,我們應該首先,將android系統整個執行程序都要爛熟於心,下面是android 程序執行圖:

從圖中我們可以看到,當我們從外部呼叫元件的時候,service 和 contentprovider 是從執行緒池那裡獲取執行緒,而activity 和broadcastreceiver是直接在主線程執行,為了,追蹤執行緒,我們可以用debug 方法,或者使用乙個工具類,這裡,我們建立乙個用於監視執行緒的工具類

/**  * @author tom_achai  

* @date

2011-11-20  *   

*/ public

class utils   

/**      * 獲取單獨執行緒資訊      * @

return

*/     

public

static

string getthreadsignature()                       

/**      *獲取當前執行緒 資訊      */     

public

static

void logthreadsignature()           

public

static

void logthreadsignature(string 

name

)           

public

static

void sleepforinsecs(

intsecs)catch (exception e)      }           /**      * 講string放進bundle 中      * @param message      * @

return

*/     

public

static

bundle getstringasbundle(string message)           /**      *       * 獲取bundle的string      * @param b      * @

return

*/     

public

static

string getstringfromabundle(bundle b) } 

有了這樣乙個類就可以方便我們觀察執行緒的執行

好了,現在準備好以後就進入正題handler

因為,我們當我們的主線程佇列,如果處理乙個訊息超過5秒,android 就會丟擲乙個 anp(無響應)的訊息,所以,我們需要把一些要處理比較長的訊息,放在乙個單獨執行緒裡面處理,把處理以後的結果,返回給主線程執行,就需要用的handler來進行執行緒建的通訊,關係如下圖;

下面是handler,message,message queue 之間的關係圖

這個圖有4個地方關係到handlers

1, 主線程(main thread)

2, 主線程佇列(main thread queue)

3,hanlder

4,message

上面的四個地方,主線程,和主線程的佇列我們無需處理,所以,我們主要是處理handler 和 message 之間的關係.

我們每發出乙個message,message就會落在主線程的佇列當中,然後,handler就可以呼叫message繫結的資料,對主線程的元件進行操作.

作為handler接受的物件,我們有必要知道message這個資料型別是個怎樣的資料型別

從官方文件中我們可以知道message 關於資料的字段

從上面的**可以看出,message 提供了乙個物件來儲存物件,而且,還提供了三個int欄位用來儲存少量int型別

當然,除了以上三個message 自有的字段外,我們還可以通過setdata(bundle b),來儲存乙個bundle物件,來儲存更豐富的資料型別,例如,等等.

在初始化我們的message的時候就可以為我們的message預設字段賦值,注意賦值順序!!!

message msg = obtainmessage(); //設定我們what 欄位的初值,注意順序!!!   

message msg = mhandler.obtainmessage(

intwhat);   //下面同理   

message msg = mhandler.obtainmessage(

intwhat,object object);   

message msg = mhandler.obtainmessage(

intwhat,

intarg1,

intarg2);   

message msg = mhandler.obtainmessage(

intwhat,

intarg1,

intarg2, object obj ); 

Android Handler訊息機制

handler訊息機制 優點 寫法 1.主線程中建立乙個handler物件 handler handler new handler 2.複寫handler物件的handlermessage方法 public void handlemessage android.os.message msg 3.在子...

Android Handler 工作原理

handler message messagequeue looper 1.looper.prepare public static void prepare private static void prepare boolean quitallowed 這裡建立的looper sthreadloc...

Android Handler相關問題

1 handler是什麼?答 handler是更新ui介面的機制,也是訊息處理的機制,我們可以傳送訊息,也可以處理訊息 2 為什麼要有handler?答 android在設計的時候,封裝了一套訊息建立 傳遞 處理機制,如果不遵循這樣的機制就沒辦法更新ui資訊,就會丟擲異常。3 handler怎麼用?...