Android UI主線程與子執行緒

2021-09-06 12:22:48 字數 1063 閱讀 3033

乙個android 程式預設情況只有乙個程序,但是乙個程序可以有多個執行緒。其中有乙個ui 執行緒也稱為ui主線程,ui thread在android程式執行的時候就被建立,主要是負責控制ui介面的顯示、更新和控制項互動。所有的android應用程式元件----包括activity、service、broadcast receiver都在應用程式的主線程中執行。因此,任何元件中的費時操作處理都可能阻塞所有其他的元件、包括service和可見的activity。

在android 中,對未響應的定義是:activity對乙個輸入事件在5s內沒有響應,或者broadcast receiver在10s內沒有完成他的onreceive處理程式。對於任何不用直接和使用者介面進行互動的重要處理,使用後台執行緒技術處理是非常重要的,將檔案操作、網路互動、資料庫、複雜計算排程到後台執行緒中完成非常重要,以免阻塞主線程。

方法一:thread+handler

開啟乙個新執行緒:new thread(new mythread()).start();

//

通過handler物件,通知主線程ui thread來更新介面

handler myhandler=new

handler()}};

class mythread implements

runnable

}

方法二:使用asynctask執行非同步執行緒。

asynctask為將耗時操作移到後台執行緒並在操作完成後同步更新ui執行緒實現了最佳實踐模式。他有助於將事件處理程式與gui執行緒進行同步,允許通過更新檢視和其他ui元素來報告進度或者在任務完成後發布結果。

要建立乙個新的非同步任務,需要擴充套件asynctask類,指定要使用的引數型別:

public

class myasynctask extends

asynctask

@override

protected

void

onpostexecute(object result)

}

執行非同步任務:

new myasynctask().execute();

主線程和子執行緒

子執行緒通過 handlerthread的thread.getlooper 繫結,在主線程的handler的handlermessage中呼叫threadhandler.sendmessagedelay msg,1000 向子執行緒傳送訊息。在子執行緒中通過handler.sendmessagede...

主線程和子執行緒

主線程負責管理由它建立的子執行緒,建立 啟動 掛起 停止等。主線程通過發訊息的方式管理子執行緒,例如,給子執行緒傳送start 訊息,子執行緒啟動,子執行緒執行入口的run 方法。thread有下面兩個構造方法 thread runnable target,string name thread ru...

關於子執行緒與主線程與hander通訊

子執行緒不能更新ui,主線程不能做耗時操作。操做流程是 子執行緒耗時完畢傳給handler sendmessage再傳給messagequeue再給looper最後傳給ui執行緒。arg1 arg2傳遞整數型。obj傳輸大部分。what屬性判斷。通過time integer.parseint ed1...