2014-03-05 48 views
0

我的應用程序向用戶一個接一個地顯示圖像。圖像從服務器下載。由於我不希望用戶等待下載的圖像,我將它們緩存在本地文件系統中(例如新的50張圖像)。AsyncTask用於在後臺下載圖像

執行: 從onCreate方法啓動一個AsyncTask,將繼續在後臺下載圖像。 是AsyncTask最適合這種使用情況?我不想用一個Service因爲我不想下載到連續發生

AsyncTask最適合這個目的是什麼?

+1

你也可以使用Volley。 –

+0

畢加索(圖片加載庫)將有我的投票 - https://github.com/square/picasso –

回答

1

是的,你可以使用Asynctask來達到這個目的。而使用的AsyncTask「onProgressUpdate()的API中的一個,可以並行更新的用戶界面爲你的形象越來越下載。

+0

您還需要在處理返回到UI線程時檢查UI的無效性。該活動可能已發送到背景,而ASyncTask正在做繁重的工作。 –

2

我會建議使用現有的庫,例如Picasso(以方)或Volley(由谷歌)。

畢加索是特別容易實現,而且會很好地工作,你的目的,並且是一樣簡單:爲庫通吃的這一點

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

你不會有AsyncTasks或AsyncTaskLoaders擔心自己將你的雙手圖像緩存在內存和磁盤上。

如果你堅持建立自己的解決方案,我建議對相關問題東張西望,因爲有很多事情要牢記:

  • AsyncTasks可能生病安裝,因爲它們直接與單個活動;你需要一個Loader或一個類似於Loaders的機制來將結果傳遞給任何需要圖像的活動。
  • 在較舊的設備上,位圖駐留在未由GC管理的特殊內存區域中;當你完成它們後,你將不得不手動處理位圖。
  • 位圖使用大量內存,需要仔細管理以避免OOME,例如在加載和存儲在LruCache內存中時對其進行縮減採樣。
  • 將圖像寫入磁盤時,請小心管理圖像緩存目錄的大小。