我正在探索Android開發人員網站並閱讀一些文章。目前使用的AsyncTask列表視圖defering圖像加載的一種方式:製作ListView滾動平滑
// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);
但是,對我來說,似乎有與該代碼有點問題。假設我們從互聯網加載圖像,並且每個圖像都需要幾秒鐘才能加載。
作爲一個用戶,如果我們滾動列表然後切換到另一個活動,會有一些AsyncTasks在後臺運行,並佔用一些帶寬,而我們可能需要它在我們的新前臺活動中。
你通常如何使用他們的方法來處理這種情況?回收視圖時,你是否殺掉了與持有人相關的AsyncTask?你是否跟蹤哪些AsyncTasks仍在運行的適配器,並在活動停止時將其全部取消?還有其他的方式嗎?
我的問題主要是關於architecturing清洗件來解決這個問題(沒有這麼多的實現)
單獨採取,下載可能需要一秒鐘,但如果您獲得了100個項目的列表或網格......您是否只在項目顯示時才下載?如果你在扔東西呢? –
根據要求可以有各種各樣的變化。您應該看一個有趣的示例是:http://androidxref.com/4.1.1/xref/development/samples/ApiDemos/src/com/example/android/apis/view/List13.java如果沒有加載滾動時完成。您當然也可以將數據緩存在後臺線程(可能包含在服務中),無論是閃存還是RAM。還有一些LruCache(http://developer.android.com/reference/android/support/v4/util/LruCache.html)可能會對這些問題感興趣。 –