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的寫法如下:
沒有留言:
張貼留言