我想在 Android 上仅使用全屏图像进行图像幻灯片放映。没有缩略图(就像在图库中一样),没有缩放,没有收缩。只需左/右滑动即可从一张图片移动到另一张图片。
图片保存在data文件夹中,大约有2000张图片。
我使用全屏 ViewPager 来显示图片。当然我不能一次加载所有 2000 张,所以我只在用户滑动到相应 View 时加载需要的图片。
每次用户滑动到新的 viewPager 位置时,我都会调用这段代码
public void onNewViewToDisplay(Integer newPosition, Integer previousPosition) {
File file = functionToGetTheCorrespondingFile(newPosition);
Bitmap bp;
bp = BitmapFactory.decodeFile(file.getPath());
((ImageView)imageAdapter.views.get(newPosition)).setImageBitmap(bp);
if (previousPosition != null && previousPosition != newPosition) {
BitmapDrawable bitmapDrawable =
((BitmapDrawable)((ImageView)imageAdapter.views.get(previousPosition)).getDrawable());
// Set the previous imageView to empty view
((ImageView) imageAdapter.views.get(previousPosition)).setImageResource(0);
// Then free previous bitmap memory
if (bitmapDrawable != null && bitmapDrawable.getBitmap() != null) {
bitmapDrawable.getBitmap().recycle();
}
}
}
所以我希望我的代码总是释放之前显示的imageview使用的内存。但是当我查看我的内存占用时
导致内存泄漏。我做错了什么?
最佳答案
您的方法效率不高,因为每次用户滑动时您都会创建每个位图。
您应该使用 LruCache 来存储位图,这样您就不必重新创建已经解码的位图。
关于java - Android幻灯片放映导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35395629/