Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android AsyncTask與handler

Android AsyncTask與handler

編輯:Android開發教程

本文主要講解下AsyncTask的使用以及Handler的應用

首先,我們得明確下一個概念,什麼是UI線程。顧名思義,ui線 程就是管理著用戶界面的那個線程!

android的ui線程操作並不是安全的,並且和用戶直接進行界面交互的操作都必須在 ui線程中進行才可以。這種模式叫做單線程模式。

我們在單線程模式下編程一定要注意:不要阻塞ui線程、確保只在ui 線程中訪問ui組件

當我們要執行一個復雜耗時的算法並且最終要將計算結果反映到ui上時,我們會發現,我們根本沒辦 法同時保證上面的兩點要求;我們肯定會想到開啟一個新的線程,讓這個復雜耗時的任務到後台去執行,但是執行完畢了呢?我 們發現,我們無法再與ui進行交互了。

為了解決這種情況,android為我們提供了很多辦法。

1)、handler和 message機制:通過顯示的拋出、捕獲消息與ui進行交互;

2)、Activity.runOnUiThread(Runnable):如果當前線程為 ui線程,則立即執行;否則,將參數中的線程操作放入到ui線程的事件隊列中,等待執行。

3)、View.post(Runnable) :將操作放入到message隊列中,如果放入成功,該操作將會在ui線程中執行,並返回true,否則返回false

4)、 View.postDelayed(Runnable, long)跟第三條基本一樣,只不過添加了一個延遲時間。

5)、android1.5以後為我們提供 了一個工具類來搞定這個問題AsyncTask.

AsyncTask是抽象類,定義了三種泛型類型 Params,Progress,Result。

Params 啟動任務執行的輸入參數,比如HTTP請求的URL

Progress 後台任務執行的百分比。

Result 後台 執行任務最終返回的結果,比如String

用程序調用,開發者需要做的就是實現這些方法。

1) 子類化 AsyncTask

2) 實現AsyncTask中定義的下面一個或幾個方法

onPreExecute(),該方法將在執行實際的後台操作前 被UI thread調用。可以在該方法中做一些准備工作,如在界面上顯示一個進度條。

doInBackground(Params…),將在 onPreExecute 方法執行後馬上執行,該方法運行在後台線程中。這裡將主要負責執行那些很耗時的後台計算工作。可以調用 publishProgress方法來更新實時的任務進度。該方法是抽象方法,子類必須實現。

onProgressUpdate(Progress…),在 publishProgress方法被調用後,UI thread將調用這個方法從而在界面上展示任務的進展情況,例如通過一個進度條進行展示。

onPostExecute(Result),在doInBackground 執行完成後,onPostExecute 方法將被UI thread調用,後台的計算結果將 通過該方法傳遞到UI thread.

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