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.獲取所有頁面視窗的控...