Handler處理機制

2021-09-08 01:25:16 字數 2230 閱讀 8190

handler缺點:如果要運送兩種型別的資料(比如乙個bitmap,乙個object)就不能運送,但可以用bunder來傳輸

*    使用handler的步驟:

*    1、建立乙個handler

*    2、在需要用到資料傳輸的地方通過handler得到message物件,通過message攜帶要傳輸的資料

*    3、直接通過handler傳送訊息到主線程

*    4、在主線中通過重寫handlermessage,接收傳輸過來的資料

如果在oncreate啟動的子執行緒做的操作不耗時,這個時候操作控制項,錯誤是存在的,只是沒有檢測出來,因為這個時候控制項還沒來得及繪製

子執行緒向主線程傳送訊息

程式步驟:

1、傳送乙個空訊息(不用構造message物件,而是直接給乙個訊息標記)

handler.sendemptymessage(1);

2、傳送乙個帶message的資訊

message message = handler.obtainmessage();

//message message2 = message.obtain();

//2.通過這個資訊,攜帶資料

message.obj = "" ;    //用來傳輸複雜資料

message.arg1 = 100;  //用來傳輸簡單整數型別

message.arg2 = 200;  //用來傳輸簡單整數型別

message.what = 300;  //一般用來給message打標記的,因為一般可以傳多個message

//3.利用handler傳送訊息,從子執行緒傳送到主線程

handler.sendmessage(message);

//傳送延遲訊息

//handler.sendmessagedelayed(message, 3000);        //隔3秒後再傳送訊息

//handler.sendemptymessagedelayed(5, 3000);

主線程向子執行緒傳送訊息

步驟與上面類似。

在接收資料的地方new handler(){} 並重寫方法

在傳送資料的地方sendmessage()

不一樣的地方:

在接收資料的地方,要寫looper.prepare();//相當於初始化looper物件

looper.loop();//迴圈

總結:如果在主線程中接收訊息,就不用寫looper,因為主線程中自帶有乙個looper物件,並且也在迴圈工作;

但在子執行緒中沒有looper物件,所以必須我們自己去建立,並且讓它迴圈。所以,在子執行緒中接收資料之

要先呼叫looper.prepare()方法,再呼叫looper.loop()方法

//子執行緒中只要有了looper物件,就可以寫吐司。主線程中自帶有looper物件,所以可以直接寫吐司。

//如果把吐司寫到looper.prepare();之前就會報錯。

注意:在子執行緒中延遲傳送要用thread.sleep()方法,不能用handler.sendmessagedelayed(message, 2000);

因為子執行緒一旦啟動了,就會一直進行,所以效果就是只有第一次會延遲傳送訊息,後面的就不會了,就會

一直傳送。而在主線程中就可以使用handler.sendmessagedelayed(message, 2000);來延遲傳送

主線程向主線程傳送訊息方法類似。。。

handler中的post方法

實際上,每乙個空間也有post方法,如下:

handler訊息處理機制

handler主要用來更新ui 因為涉及到執行緒安全,android必須在ui執行緒 即主線程 裡才能更新ui,在其他執行緒裡更新ui會報錯,而一些耗時的操作又必須通過開啟新的執行緒來執行,這就要用到handler來傳遞訊息了。在主線程中建立乙個handler的例項,並重寫handlermessag...

Handler訊息處理機制

剛開始接觸android,邊學習邊做筆記,希望大家多指正。經常在 中看到sendmessage 族的一些函式,開始時總搞不明白訊息傳送到 去了,誰去處理,什麼時候處理。下面是問題解答。至於開始的幾個疑問,我是這樣理解的。訊息傳送出去,就相當於馬上要被處理了。就像進地鐵一樣,已經站到了進站的佇列中 假...

非同步訊息處理機制 Handler

handler面試詳解 一 什麼是handler handler通過傳送和處理 message 和runnable 物件來關聯對應執行緒的 messagequeue.1.可以讓對應的message和 runnable 在未來的某個時間點進行相應處理 2.讓自己想要處理的耗時操作放在子執行緒,讓更新 ...