1. 程式人生 > >android handler 多執行緒demo

android handler 多執行緒demo

andriod提供了 Handler 和 Looper 來滿足執行緒間的通訊。為了研究其中執行緒機制的問題,寫了2個demo:
Demo1:

在這個demo中,整個過程如下:
程式已啟動,就把MyRunnable加入到訊息佇列中,android的handler是非同步機制,所以在handler.post(new MyRunnable());  之後,程式會繼續執行,所以以後的語句會繼續,這時候我們輸出Oncreate中的當前執行緒ID。同時MyRunnable的run方法也在執行,一樣輸出run方法中的當前執行緒ID,然後讓執行緒休眠6秒。
demo的結果分析:
1:控制檯的輸出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :1
2:程式啟動後6秒,我們才看到main.xml中的內容(只有一個textview)

這2個結果都表明handler和主執行緒是同一個執行緒。如果這時候你做的是一個耗時的操作(比如下載
),那麼這樣是不可行的。
於是,android給我們提供了Looper這樣一個類。其實Android中每一個Thread都跟著一個Looper,Looper可以幫助Thread維護一個訊息佇列.

Demo2:



在這個demo中,用到了HandlerThread,在HandlerThread物件中可以通過getLooper方法獲取一個Looper物件控制控制代碼,我們可以將其這個Looper物件對映到一個Handler中去來實現一個執行緒同步機制。於是就有以下結果;
1:控制檯的輸出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :10
2:程式啟動後,我們立刻看到main.xml中的內容。
這樣就達到了多執行緒的結果。