Android:在图库中延迟加载

标签 android lazy-loading image-gallery image-loading

我查看了一些关于延迟加载的帖子,但我相信我的问题有点不同。

我有一个画廊(我的类(class)扩展了画廊),它显示 20 张相当大的图像(每张 400-500K)。我无法将它们全部加载到图库中,因为我遇到了 OutOfMemory 异常。
因此,我创建了一个包含 20 个 Drawable 的数组,并最初填充了前 9 个元素(图像来自网络),并将其余所有元素设置为 null。我的 Intent 是:向右一甩,获取元素编号。 10 并设置为空元素编号。 0. 在另一次向右滑动时获取元素编号。 11 并设置为空元素编号。 1 为空。左撇子的逻辑相同。

问题是我可以比获取元素快得多。 我的图库有一个 BaseAdapter,它的 getView() 看起来像这样:

public View getView(int position, View  convertView, ViewGroup  parent){
     ImageView imageView = new ImageView();
     imageView.setDrawable(imageArray[position];
     ....
     ....

     return imageView;
}

我如何告诉 getView() - 如果 imageArray[position] 仍然为 null,显示一个“正在加载...”对话框,一旦它被设置重复你自己的相同位置?
我不想看到 imageView 为空然后即时设置。我希望在设置 imageView 之前根本看不到它。

谢谢。

最佳答案

Gallery 旨在提供流畅的体验。如果您挡住屏幕并且在获取下一张图像之前不切换到下一张图像,那将是非常糟糕的 UI。这样用户将根本无法 throw 。您应该在加载时显示一些加载指示器而不是图像。

我认为您的情况很常见。您应该下载图像并显示它们。如果出现 OutOfMemory,您可以尝试对图像进行 super 采样 Strange out of memory issue while loading an image to a Bitmap object .

如果仍然存在 OutOfMemory,您应该从内存中删除位图并将它们缓存到 SD。因此,当用户返回时,您可以再次从 SD 加载图像,速度足够快。而且内存消耗会更低。正如您所建议的,您可以将 10 张最近的图像缓存在内存中,将其他图像缓存在 SD 上。

你可以看看我的示例代码Lazy load of images in ListView .实际上它是一个 ListView 适配器,但您可以将其应用到图库中并稍作修改。我认为它会完全满足您的需求。

关于Android:在图库中延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3181728/

相关文章:

java - Eclipse 不会在模拟器中启动 android 应用程序

entity-framework - Entity Framework 延迟加载启用的含义

java - 使用 CrudRepository 进行延迟加载

javascript - vue gallery 添加加载微调器

android - 根据数据库中的信息在 RecyclerView 中显示不同的 viewType?

android - Google Play 表示我的设备不支持我的应用

jquery - 重新加载时合理的图库中断

android - 水平图像库 - 空白 : nowrap messing up max-height: 100% on Firefox for Android

如果最初为零,Android 不会为 alpha 设置动画

Angular 延迟加载模块,单元测试代码覆盖率