2016-07-15 36 views
0

我正在設計一個針對> = API 17的Android應用程序。我已經創建了一個類,DownloadImageTask,它擴展了AsyncTask,並接收一個字符串(URL)和一個ImageView作爲參數。其中,我打開HTTP連接,從URL下載圖像,並使用BitmapFactory從數據創建一個Bitmap對象,然後將位圖設置爲ImageView。最終的結果是用戶可以滾動瀏覽數據的填充列表,並且儘可能地填充圖像。產生大量的AsyncTask實例 - 影響?

這似乎是一個很好的設計 - 但我擔心我將我的應用程序置於OOM條件或其他違反用戶體驗規則的風險之中。我想知道我設計的方式是否正確,或者如果不正確,我該如何處理。

非常感謝您的幫助。

+3

是。這是非常容易出問題的問題,並且這個問題已被像Picasso,通用圖像加載程序和https://android-arsenal.com/tag/46這樣的圖像庫解決得很好。 – DeeV

+0

您需要管理大量的圖像,或者不適當地處理它們的縮放比例,以便真正遇到問題,但是,您應該查看大型團隊花費很長時間調整的一個庫。滑翔也是一個不錯的選擇。 – zgc7009

回答

1

兩個方面的考慮到你自己的方法:

  1. 你不應該因爲這樣可以幫助您連接你的觀點,你的服務層的ImageView傳遞給異步任務。因此,向異步任務發送URL,並將onPostExecute方法調用給實現updateView(或類似方法)的Activity。
  2. 關於你的OOM,你是對的。如果您使用的原始位圖可能具有比所需的更大的分辨率,則可能會出現此問題。因此,您應該縮小保存在內存中的圖像。

如果您使用一些圖像,最後一個問題可能並不困難,否則可能會產生問題。因此,如果您將使用大量圖像,並且不必強制實施自己的版本,則應該查看現有的庫。有些已經提到:

+1

根據這裏的建議,我從我的項目中刪除了AsyncTask,並用Glide替換了它。這不僅使我的UI與我的服務層斷開連接,而且還提供了許多其他好的功能。謝謝大家的意見。 – Joel