2022年3月10日 星期四

android studio:thread

Thread是所謂的執行緒,所謂的執行緒就是每個程式執行的整個過程,而主要的執行緒(UI Thread),就是主要執行的過程。在寫程式的時候,若把每件事都寫在主要的執行序上,那會使整個程式花很多的時間,而且android 執行超過五秒後,就可能產生ANR(Application Not Responding)的問題,導致程式錯誤,因此會在背景寫其它的執行緒,當這些執行完把資料完成後,就把檔案丟給主要的執行緒處理,又或者在背景寫其它的執行緒,等主要的執行緒丟資料給它,再進行處理。

(一)一次性執行緒寫法如下,這種寫法就是執行緒完成後,就結束了:

Thread thread1=new Thread(thread1); //宣告新建一個新的執行緒為thread1,而它要跑的工作為thread1

thread1.start(); //讓thread1這個執行緒開始運作


而我們將要執行的方法寫Runnable這個類別的方法中。


private Runnable thread1=new Runnable () {

        public void run() {      

            //要在背景運作的程式

        }

    };

(二)第二種thread會一直常駐,等待程式去召喚這個thread,而因為是常駐,因此不使用要用quit關閉這個執行序。

myThread = new HandlerThread("handerThread");

//建立一個名為handerThread的新的Thread執行緒

myThread.start(); //myThread這個執行緒開始運作

myThreadHandler =new Handler(myThread.getLooper()); 

//handler是一個消息的控制器,在此可以發送與處理訊息。給這個執行序,一個控制器HandlerThread為getlooper,所以它會持續運作。


myThreadHandler.post(threa1); ///請控制器去執行threal這個工作


private Runnable thread1=new Runnable () {

        public void run() {      

            //要在背景運作的程式

        }

    };




補充:一般我們透過holder處理和發送主執行緒和副執行緒要溝通的訊息。而現在有一個更為簡便的方法,runOnUiThread( Runnable ),它可以把運作的程式放在Runnable中,然後在需要的時候ui,把這個Runnable對象傳給在主執行序中的runOnUiThread(Runnable)。因為要更新主執行緒的視圖,必須回到主執行緒中,而 runOnUiThread可放在主執行序中,如果執行時是在主執行緒中就立刻執行,若不是主執行序中,就排進副執行緒中,等待執行。實作runOnUiThread的寫法如下:

runOnUiThread(new Runnable() { void run() { // 要運作的程式 } });








沒有留言:

張貼留言