gpt4 book ai didi

android - 带有大型高分辨率图像的 java.lang.OutOfMemory

转载 作者:行者123 更新时间:2023-11-29 16:09:52 25 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,该应用程序在其多个 Activity 中使用多个大图像。每张图片大约为 1280x800,我为每个 Activity 加载了大约 2-4 张这样的图片。我意识到这些图像在分配给设备上每个单独应用程序的内存方面非常大,但是我如何才能以原始分辨率显示它们而不会遇到 java.lang.OutOfMemory 错误?我需要这些图像在屏幕上以完整尺寸显示(当屏幕小于图像时,缩放由 xml 自动完成)。我看到了几种涉及将图像缩小为缩略图并将其存储到内存中的解决方案,但这不会导致图像失去其原始大小/分辨率吗?感谢您的帮助!

最佳答案

您可以为此做一些事情。

首先想到的是 1280x800(可能)是您的整个屏幕,因此您应该一次只需要显示一个。这样做时不要记住其他人。

仍然是 1280x800 图像,每像素 4 字节,只有 4MB,而这些天平板电脑似乎都提供 48MB 的堆。如果需要,您应该能够记住一些。如果内存不足,则可能是泄漏。如果您在 DDMS 中观看,您的内存使用量是否会随着您更改 Activity 而继续增长?

泄漏的一个常见来源是位图本身。务必调用Bitmap#recycle当你完成它们时。

如果真的要解决这个问题,并且您无法适应提供的堆空间,您还可以尝试将 android:largeHeap="true" 添加到 list 中的应用程序标签中。这将要求系统为您提供更多的堆空间——在某些设备上高达 256MB。不过,这应该是最后的手段,因为它会因设备而异,并且在某些设备上会被完全忽略(想到最初的 Kindle Fire)。

您可以使用 Runtime.getRuntime().maxMemory(); 查看您有多少总堆空间。参见 this answer以获得更详细的解释。查看您使用了多少比较棘手,但有一个描述 here如果你想对付那只野兽。

最后,可能有比在 xml 中指定图像更好的加载图像的方法。请务必阅读此 developer guide page .即使您必须将它们保留在 xml 中,我也看到通过将图像 Assets 拆分到 drawable-hdpidrawable-mdpi 等目录中显着改善了内存使用情况而不仅仅是将它们转储到 drawable 中。

关于android - 带有大型高分辨率图像的 java.lang.OutOfMemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242318/

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