異步下載圖片的任務

	這些代碼,覺得對自己有用的就粘貼下來了,看不懂勿怪。
	/**
	 * 異步下載圖片的任務。
	 * 
	 * @author guolin
	 */
	class BitmapWorkerTask extends AsyncTask<String, Void, Bitmap> {
		/**
		 * 圖片的URL地址
		 */
		private String imageUrl;
		@Override
		protected Bitmap doInBackground(String... params) {
			imageUrl = params[0];
			// 在後臺開始下載圖片
			Bitmap bitmap = downloadBitmap(params[0]);
			if (bitmap != null) {
				// 圖片下載完成後緩存到LrcCache中
				addBitmapToMemoryCache(params[0], bitmap);
			}
			return bitmap;
		}
		@Override
		protected void onPostExecute(Bitmap bitmap) {
			super.onPostExecute(bitmap);
			// 根據Tag找到相應的ImageView控件,將下載好的圖片顯示出來。
			ImageView imageView = (ImageView) mPhotoWall
					.findViewWithTag(imageUrl);
			if (imageView != null && bitmap != null) {
				imageView.setImageBitmap(bitmap);
			}
			taskCollection.remove(this);
		}
		/**
		 * 建立HTTP請求,並獲取Bitmap對象。
		 * 
		 * @param imageUrl <span style="font-family: Arial, Helvetica, sans-serif;">圖片的URL地址</span>
		 *            
		 * @return 解析後的Bitmap對象
		 */
		private Bitmap downloadBitmap(String imageUrl) {
			Bitmap bitmap = null;
			HttpURLConnection con = null;
			try {
				URL url = new URL(imageUrl);
				con = (HttpURLConnection) url.openConnection();
				con.setConnectTimeout(5 * 1000);
				con.setReadTimeout(10 * 1000);
				con.setDoInput(true);
				con.setDoOutput(true);
				bitmap = BitmapFactory.decodeStream(con.getInputStream());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (con != null) {
					con.disconnect();
				}
			}
			return bitmap;
		}
	}
        /**
	 * 記錄所有正在下載或等待下載的任務。
	 */
	private Set<BitmapWorkerTask> taskCollection;
	BitmapWorkerTask task = new BitmapWorkerTask();
	taskCollection.add(task);<pre name="code" class="java"><span style="white-space:pre">	</span>task.execute(imageUrl);

	public void cancelAllTasks() {
		if (taskCollection != null) {
			for (BitmapWorkerTask task : taskCollection) {
				task.cancel(false);
			}
		}
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章