Android中的Handler機制

2021-09-12 11:38:37 字數 1460 閱讀 1548

1、android系統不允許在主線程中執行耗時操作。(activity和service不超過5秒,boroadcastreceiver元件廣播不超過10秒)

2、耗時操作交給工作執行緒去完成。有時,耗時工作完成後,需要通知主線程/需要更新ui元件,需要有一種機制在主線程和工作現場之間進行通訊。這是機制在android中即為handler機制

3、handler不是另外開啟乙個執行緒,他歸屬於主線程。在主線程中宣告和例項化handler物件

4、主/子執行緒訊息傳遞的機制一般處理步驟(sendmessage/handlemessage的方式)

a) 在主線程中宣告和例項化handler物件,重寫handlemessage(message msg)方法。

b)在子執行緒中,1、構建message物件(message物件的構建有兩種方式)2、封裝資料(最多傳兩個整型資料,object型別的資料,bundle型別的資料)3、sendmessage方法將訊息傳遞給主線程

c)在主線程的handlemessage(message msg)方法中處理訊息

5、message物件的構建有兩種方式

a)新建乙個message:message msg=new message

b)從訊息池中獲取乙個訊息:message msg=handler.obtainmessage();

推薦使用方法b。原因是不需要重複去新建message,可以節省記憶體空間

6、如果有多個子執行緒向主線程發訊息,在主線程中需要判斷訊息來至於哪個子執行緒。如何判斷呢?-----what值。what可以是乙個int值,也可以是封裝在message中what屬性

a)只是簡單的標識子執行緒,子執行緒沒有資料傳遞給主線程可以用:sendemptymessage(int 的what)值

b)不僅要標識子執行緒,而且子執行緒有資料傳遞給主線程

message msg=handler.obtainmessage();

mag.what=1;

mag.obj=.....

c)主線程的判斷方式

handlemessage(message msg)

}

7、post方式來處理子執行緒與主線程的通訊

a)主線程只需要例項化handler物件

b)子執行緒中呼叫post方法,post方法的引數是乙個runnable物件,該物件的run方法實現主線程要做的事情,例如更新ui

public void download(view view) 

});} catch (interruptedexception e) }}

}.start();

}

請多多指教~

Android中的Handle基礎應用一

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

執行緒的handle和tid

執行緒是cpu分配時間執行任務的最小單位。在linux中,核心並沒有執行緒和程序的概念,所謂執行緒,只是可以和其他兄弟執行緒共享資源的程序。在posix中,pthread create建立執行緒,並將執行緒的handle或者說id傳遞給第乙個引數,在這還是稱其為handle。這個handle與pth...

selenium學習 8 handle的切換

在我們進行測試的過程中,經常會遇到點開超連結開啟另乙個新視窗的情況,即 target blank 這種情況下,如果要在新視窗進行操作,需要將焦點移到新視窗上,本文將介紹這種情況的處理 切換視窗的方法 1 獲取當前頁面視窗的控制代碼 current window handle 2.獲取所有頁面視窗的控...