gpt4 book ai didi

android - 是否有必要将图像存储在内存中以显示在 android 的 ListView 中

转载 作者:搜寻专家 更新时间:2023-11-01 09:02:12 29 4
gpt4 key购买 nike

我在列表的每一行显示带有一个 ImageView 的列表。

为此,我使用 Drawable.createFromStream 在另一个 AsyncTask 中从网络下载图像并将它们作为 Drawable 存储在 ArrayList 中,我将其传递给扩展 BaseAdapter 类的 Adapter 类。

但是图片是用高分辨率相机拍摄的,所以尺寸可能很大。我收到了 OutOfMemory 错误。

所以我的问题:

  1. 将图像存储为可绘制或位图或任何其他格式哪个更有效?

  2. 通过将所有图像存储在内存中(在数组列表中),我做得对吗?也就是说,我在想,一旦我得到一张图片,我会将其显示在 ImageView 上,而不会存储在 ArrayList 中。

  3. 有什么办法,我可以在下载后压缩图像,这样它们占用的内存空间就更少。

我的总代码存在 here

最佳答案

Android 文档提供了一个很好的示例,展示了如何在您的 Android 应用程序中处理位图。该示例使用磁盘和内存缓存并在后台加载图像。通过这样做,主 UI 线程不会因加载图像而变慢。

Loading Bitmaps effectively

在示例中,图像是从 picasa 加载的。但是,修改示例很容易,因此可以使用本地存储的图片。您只需编写自己的从“ImageResizer”扩展而来的 ImageLoader:

public class ImageLoader extends ImageResizer {
public ImageLoader(Context context, int imageWidth, int imageHeight) {
super(context, imageWidth, imageHeight);
}
public ImageLoader(Context context, int imageSize) {
super(context, imageSize);
}
@Override
protected Bitmap processBitmap(Object data) {
return decodeSampledBitmapFromFile((String)data, imageWidth, imageHeight);
}
}

但直接回答您的问题:可以将图像加载为位图。但是你必须使用缓存和弱引用,这样图像就可以被垃圾收集起来,以防它们在屏幕上不可见。缓存它们并使用后台任务进行加载可以实现流畅的 UI。

关于android - 是否有必要将图像存储在内存中以显示在 android 的 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14273783/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com