AsyncTask非同步任務,或稱異步任務,是一個相當常用的類別,是專門用來處理背景任務與UI的類別。
主執行緒又稱UI執行緒(UI Thread),任何有關UI的東西都在主執行緒中執行,若是你的程式佔據主執行緒很久,使用者體驗會非常的差,或者會直接崩潰關閉
進行網路下載或其他活動時 不允許使用UI主執行緒
值得一提的是
此類在 API 級別 30 中已棄用。
請改用標准java.util.concurrent
關於concurrent有時間再來專門寫一篇
最常見的AsyncTask 就是載入網路上的圖片URL 設定為你的Image圖片
基礎架構
//載入檔案任務類別 繼承了AsyncTask
//其中三個參數分別是 1.傳入參數種類 2.回傳進度 3.回傳資料
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView mImageView;
//建構式
public DownloadImageTask(ImageView bmImage) {
this.mImageView = bmImage;
}
//背景執行中的方法 取得URL圖片並轉為Bitmap 也就是BMP點陣圖
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
//執行後 處理動作 這邊算是主UI線程了
protected void onPostExecute(Bitmap bmp) {
mImageView.setImageBitmap(bmp);
}
}
執行方法
new DownloadImageTask().execute(url1, url2, url3);