Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> 在Android中使用Handler和Thread線程執行後台操作

在Android中使用Handler和Thread線程執行後台操作

編輯:Android開發教程

大家都知道,在PC上的應用程序當需要進行一些復雜的數據操作,但不需要界面UI的時候 ,我們會為應用程序專門寫一個線程去執行這些復雜的數據操作。通過線程,可以執行例如 :數據處理、數據下載等比較耗時的操作,同時對用戶的界面不會產生影響。在Android應用 程序開發中,同樣會遇到這樣的問題。當我們需要訪問網絡,從網上下載數據並顯示在我們 的UI上時,就會啟動後台線程去下載數據,下載線程執行完成後將結果返回給主用戶界面線 程。

對於線程的控制,我們將介紹一個Handler類,使用該類可以對運行在不同線程中的多個 任務進行排隊,並使用Message和Runnable對象安排這些任務。在javadoc中,對Handler是這 樣解釋的:Handler可以發送和處理消息對象或Runnable對象,這些消息對象和Runnable對象 與一個線程相關聯。每個Handler的實例都關聯了一個線程和線程的消息隊列。當創建了一個 Handler對象時,一個線程或消息隊列同時也被創建,該Handler對象將發送和處理這些消息 或Runnable對象。

下面有幾種對Handler對象的構造方法需要了解一下:

a、如果new一個無參構造函數的Handler對象,那麼這個Handler將自動與當前運行線程相 關聯,也就是說這個Handler將與當前運行的線程使用同一個消息隊列,並且可以處理該隊列 中的消息。

private Handler handler = new Handler();

我們做這樣一個實驗,在主用戶界面中創建一個帶有無參構造函數的Handler對象,該 Handler對象向消息隊列推送一個Runnable對象,在Runnable對象的run函數中打印當前線程 Id,我們比較主用戶界面線程ID和Runnable線程ID是否相同。具體代碼如下:

HandlerTest01

public class HandlerTest01 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView(R.layout.main);

System.out.println("Activity ---> " + Thread.currentThread().getId());
handler.post(r);
}

private Handler handler = new Handler();
private Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println ("Runnalbe ---> " + Thread.currentThread().getId());
}
};
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved