因為AndroidUI線程不能進行耗時的操作,比如檔案下載,網路連接等。所以必須在新的線程中進行操作。往往擷取的資料又需要顯示到當前的Activity中,在其它的線程中是無法更新UI的,一般有兩種方法:1.Handler 2.AsyncTask
之前嘗試了Handler的方法,感覺易懂繁瑣。後來看到各種介紹AsyncTask的文章,於是參照google的API guides嘗試了下,感覺各種好。
現在來做一個使用AsyncTask來下載圖片,並且更新到當前UI的例子。
完成這項工作只需要兩步
1.寫一個類繼承AsyncTask
2.在OnClick裡面使用這個類
先看activity_main.xml檔案吧。很簡單的布局,一個按鈕,一個ImageView框
接下來看MainActivity.java這個檔案
MainActivity //聲明Button和ImageView Button button = ImageView imageView = //擷取到Button和ImageView button == //給按鈕設定監聽器 button.setOnClickListener( ButtonListener //當按下按鈕時,就開始執行這個AsyncTask GetImageTask().execute("http://content.52pk.com/files/121122/1284656_175821_1_lit.jpg" //自己建立一個類,繼承AsyncTask這個類後面的<String, Void, Bitmap>指的是參數,進度,傳回值。
//參數:我們傳入一個圖片的網路地址,所以應該是String
//進度:沒搞明白,大致是指這個耗時操作的進度,你可以把進度更新到進度條上顯示
//傳回值:返回的是一個圖片,所以是Bitmap
GetImageTask AsyncTask<String, Void, Bitmap>= = .loadImageFromNetwork(urls[0 //覆寫的方法,當耗時的操作執行完之後執行,這裡就是把獲得的Bitmap更新到ImageView上 Bitmap loadImageFromNetwork(String imageUrl) = ===
參考資料:http://developer.android.com/reference/android/os/AsyncTask.html