繁体   English   中英

Android:在图库中延迟加载

[英]Android: lazy loading in Gallery

我查看了一些有关延迟加载的帖子,但我认为我的问题有所不同。

我有一个图库(我的课扩展了Gallery),其中显示20张相当大的图像(每个图像400-500K)。 由于收到OutOfMemory异常,因此无法将它们全部加载到图库。
因此,我创建了一个包含20个Drawables的数组,并最初填充了前9个元素(图像来自Web),并将所有其余元素设置为null。 我的意图是这样的:向右掠,获取元素编号。 10并设置为空元素编号。 0.再次右移,获取元素编号为0。 11并设置为空元素编号。 1到null。 左跳同样的逻辑。

问题是我可以比获取元素快得多。 我的画廊有一个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。

谢谢。

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

我认为您的情况很普遍。 您应该下载图像并显示它们。 如果得到OutOfMemory,则可以尝试将图像超采样,同时将图像加载到Bitmap对象时出现内存不足问题

如果仍然有OutOfMemory,则应从内存中删除位图并将其缓存到SD。 因此,当用户后退时,您可以再次从SD加载图像,速度将足够快。 并且内存消耗将更低。 如您所建议,您可以在内存中缓存10个最新图像,而在SD上缓存其他图像。

您可以看一下我的示例代码ListView中的图像的延迟加载 实际上,它是一个ListView适配器,但您可以对其进行少量修改即可将其应用于图库。 我认为它将完全满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM