android handler 多執行緒demo
阿新 • • 發佈:2019-02-17
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中的內容。
這樣就達到了多執行緒的結果。