子執行緒不能更新ui,主線程不能做耗時操作。
操做流程是
子執行緒耗時完畢傳給handler sendmessage再傳給messagequeue再給looper最後傳給ui執行緒。
arg1/arg2傳遞整數型。
obj傳輸大部分。
what屬性判斷。
通過time=integer.parseint(
ed1.gettext().tostring());獲取edittext中的內容並轉換為整數型。
具體**為
publichandlerhandler=newhandler()}; bt1.setonclicklistener(newview.onclicklistener()
catch(interruptedexception e) } } }).start(); }});
使用hander的步驟是
在ui執行緒中建立hander匿名內部類;
在匿名內部類中重寫handdermessage方法;
在ui執行緒中啟動子執行緒;
將需要傳遞的資料賦值到message物件中;
通過hander物件的sendmessage方法傳送訊息到訊息陣列;
在handlemessage方法中接收訊息。
looper就是讓執行緒不停的迴圈工作讓普通執行緒成為迴圈執行緒。
當建立loooper時系統會自動建立乙個messagequeue。
乙個執行緒中只會存在乙個looper和乙個messagequeue。
Android UI主線程與子執行緒
乙個android 程式預設情況只有乙個程序,但是乙個程序可以有多個執行緒。其中有乙個ui 執行緒也稱為ui主線程,ui thread在android程式執行的時候就被建立,主要是負責控制ui介面的顯示 更新和控制項互動。所有的android應用程式元件 包括activity service bro...
APUE 執行緒 主線程與子執行緒的關係
include include include include include void pthread prc void arg int main int argc,char argv printf i am main n 執行的結果為 i am main 1 當主線程結束時,整個程序都會結束 子...
控制主線程與子執行緒執行順序
是從往往下順序執行,所以主線程執行完畢才能執行子執行緒,只要主線程 在子執行緒的start 方法之前就可以。子執行緒執行完畢,主線程才能繼續執行,最簡單方法是在主線程內子執行緒呼叫join 方法,如果是多個子執行緒執行完畢才能執行主線程,可以使用countdownlatch類。在主線程中執行awai...