編輯:初級開發
方法一、
創建一個新的線程執行我們的任務,使用Thread類,在 run(){}中寫入任務代碼,比如:
new Thread(new Runnable() {
public void run() {
Downloader.downloadFile(url);
}
}).start();
但使用Thread會產生一些意想不到的問題,需要程序員用更多的代碼手動的維護它。
方法二: Android SDK為我們提供了一個後台任務的處理工具AsyncTask。AsyncTask就是一個封裝過的後台任務類顧名思義就是異步任務,方便我們維護,Android開發網提示這樣的好處可以解決一些線程安全問題,AsyncTask直接繼承於Object類,位置為android.os.AsyncTask<Params, Progress, Result>。要使用AsyncTask工作我們要提供三個泛型參數,並重載四個方法(至少重載一個)。
三個泛型:
Param ,任務執行器需要的數據類型
Progress 後台計算中使用的進度單位數據類型
Result 後台計算返回結果的數據類型
有些參數是可以設置為不使用的,只要傳遞為Void型即可,比如AsyncTask<Void, Void, Void>
四個步驟:
onPreExecute(),執行預處理,它運行於UI線程,可以為後台任務做一些准備工作,比如繪制一個進度條控件。
doInBackground(Params...),後台進程執行的具體計算在這裡實現,doInBackground(Params...)是AsyncTask的關鍵,此方法必須重載。在這個方法內可以使用publishProgress(Progress...)改變當前的進度值。
onProgressUpdate(Progress...),運行於UI線程。如果在doInBackground(Params...)中使用了publishProgress(Progress...),就會觸發這個方法。在這裡可以對進度條控件根據進度值做出具體的響應。
onPostExecute(Result),運行於UI線程,可以對後台任務的結果做出處理,結果就是doInBackground(Params...)的返回值。此方法也要經常重載,如果Result為null表明後台任務沒有完成(被取消或者出現異常)。
AsyncTask實例代碼:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100)); //下載進度計算
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]); //更新進度顯示
}
protected void onPostExecute(Long result) {
showDialog("android123下載測試 " + result + " bytes");
}
}
在Activity中我們這樣使用它:
try{
new DownloadFilesTask ().execute(url);
}catch (Exception e) {
Log.e("error", e.toString());
}
下面展示一段在android1.5上讀取手機通訊錄的代碼1 //鏈接通訊錄數據庫 2 ContentResolver content = getContentResol
Nexue One是有一定的緣分的,記得是在1月12號的晚上寫的Nexus One評測,因為對這款手機的關注,使得在奔赴下一個工作征程的時候最後用Nexu
在android開發中ListView是比較常用的組件,它以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。抽空把對ListVIEw的使用做了整理,並寫了個小
public class HelloXML extends Activity {private static final int MESSAGETYPE_01 = 0x