我有一张带有sdcard缩略图的gridview。我使用asynctask来延迟加载图像。当我慢慢滚动时,它工作得很完美,但是当我滚动太快时,不同的图像多次加载到同一网格项目上,最后加载正确的图像需要6 7秒。我试图通过使用getFirstVisiblePosition和getLastVisiblePosition检查视图的位置是否可见,这次一些图像从未加载。
答案 0 :(得分:3)
您是否尝试缓存图片?以LruCache为例。 这是文档: http://developer.android.com/reference/android/util/LruCache.html
这里是官方教程 http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
快速使用它:
LruCache<String, Bitmap> mMemoryCache;
public void onCreate(Bundle b)
{
.....
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in kilobytes rather than
// number of items.
return bitmap.getByteCount() / 1024;
}
};
....
}
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
mMemoryCache.put(key, bitmap);
}
}
public Bitmap getBitmapFromMemCache(String key) {
return mMemoryCache.get(key);
}
编辑: 如果您以异步方式加载图像,则必须查看本教程: http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
它向您展示了如何处理并发并取消当前任务(如果正在运行)