java - 使用 BitmapFactory 加载多个图像 [OutOfMemoryException]

标签 java android

我正在尝试使用 BitmapFactory 将 30 个图像加载到位图数组中,但无论我做什么,我都会遇到 OutOfMemoryException.. 我尝试调整它的大小并缩小比例.. 人们通常会做 4-8 我尝试了 12 ,16,20,没有任何效果..

我有一个循环,它加载一串 URL 并每次打开一个新的 httpurlconnection,下载图像,并尝试将其保存为位图。每张图像大约为 300kb。

我读过其他人只用一两个图像遇到这个问题,所以我不确定我想要做的事情是否可能。我知道 jpeg 和 png 是压缩格式,文件大小是wayyy 在手机上更大,因为它是未压缩的位图,但必须有一种方法可以有效地将一堆图片保存在数组中..因为我以前见过它这样做。

我尝试了 bitmap.recycle() ,加载大约需要 20 秒,但没有内存错误,然后当我尝试从位图中查看图像时,它给了我“无法查看回收的图像”?

不确定是否有其他人尝试加载许多图片(30-100)并将其保存在位图数组中,或者是否可能,但无论哪种方式,请告诉我!

谢谢。

最佳答案

我解决了这个问题,并认为我应该帮助任何遇到同样问题的人。

我最终使用了 nostra13 的“通用图像加载器”- https://github.com/nostra13/Android-Universal-Image-Loader

为了避免 OOM 错误,我从 API 加载了两组独立的图像,一组是完整尺寸,一组是缩略图尺寸(100x100 左右)。然后,我加载 gridview 的所有缩略图大小图像,并且仅在用户单击缩略图时加载全尺寸的单个图像。通过这样做,我避免了所有 OOM 错误。在 GridView 中显示下一个位图之前,我还会回收使用的位图。

希望这有帮助:)

关于java - 使用 BitmapFactory 加载多个图像 [OutOfMemoryException],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654249/

相关文章:

java - JAX-RS 和 EJB 异常处理

Android 图像调整大小和保留 EXIF 数据(方向、旋转等)

android - 如何为 Material 日期选择器设置最小或最大日期

android - JQuery 不适用于 android 浏览器

java - 带空格的 Eclipse 运行配置参数

java - 如何在java中不写入日期和时间注释的情况下在属性文件中写入数据

java - 我如何在java中使用mechanize python

java - 在链表末尾插入并不是一个特殊情况。那么数组的末尾呢?

java - Android MediaPlayer 意外停止播放(尚未最终确定)

android - 如何获取外部存储 SD 卡大小(已安装 SD 卡)?