Java.lang.OutOfMemoryError:位图大小超过VM预算 - Android - 有多少张图片?

3
我正在开发一款安卓应用程序,并且在阅读和自学过程中,我发现同时在屏幕上显示大量图片会导致异常。

问题是,我可以在屏幕上同时拥有多少个图片、多少KB的图片或多少个布局/图片。

我知道这不是影响内存的唯一因素,但我正在寻找一个数字,以便能够做出规划。

谢谢

Daniel


编辑:

我在Android开发网站上找到了这个(http://developer.android.com/resources/articles/future-proofing.html

避免使用的技术,#3:过度使用布局

由于View渲染基础设施的更改,布局中超过10个(或更多)深度或30个(或更多)总数的View层次结构现在可能会导致崩溃。对于过度复杂的布局,这一直是一个风险,但您可以认为Android 1.5比1.1更好地暴露了这个问题。大多数开发者不需要担心这个问题,但如果您的应用程序具有非常复杂的布局,则需要将其精简。您可以使用更高级的布局类(如FrameLayout和TableLayout)简化布局。

我想这可能是我的问题。

当它说“广泛”时,是指最后一级吗?

谢谢

丹尼尔


1
相关:https://dev59.com/GXI-5IYBdhLWcg3wQV4Z - Mark Byers
如果你必须问,那么你买不起它。 - Anon.
3个回答

2

这个答案有两个部分

1)重要的不是屏幕上有多少图像,而是在完成活动时仔细清理一切

2)(未来保障您的应用程序)

避免使用的技术,#3:过度使用布局

由于视图呈现基础设施的更改,在布局中具有非常深(超过10个)或广泛(总共超过30个)的视图层次结构现在可能会导致崩溃。对于过于复杂的布局,这一直是一个风险,但您可以认为Android 1.5比1.1更擅长暴露此问题。大多数开发人员不需要担心这个问题,但如果您的应用程序具有非常复杂的布局,则需要将其减肥。您可以使用更高级的布局类(如FrameLayout和TableLayout)简化布局。

Daniel


1

设备的内存大小因设备而异,你可以使用的内存量取决于系统同时执行的其他任务。如果可能的话,最好避免让系统的内存耗尽。你为什么需要在屏幕上展示这么多图片呢?


是的,我屏幕上有许多图片,它一遍又一遍地崩溃,该怎么解决呢? - Abhijit Chakra

1

这件事情取决于手机的堆大小。 如果您的应用程序获取的堆比手机提供的更多,则可能会出现问题。

新一代的Android设备包含以下几种:

HTC Wildfire(2.2.1)= 16MB。
HTC Wildfire S(2.3.5)= 20MB。
HTC Salsa(2.3.3)= 20MB。
HTC Desire(2.3.3)= 32MB。
HTC Desire S(2.3.5)= 32MB。
三星Galaxy S GT-I9000(2.2)= 48MB。
三星Galaxy R GT-I9103(2.3.5)= 64MB。
三星Galaxy Y GT-S5360(2.3.5)= 64MB

因此,没有确切的解决方案,但您可以尝试优化位图大小。 例如,在使用位图后回收位图或使用bitmapFectorysampleSize创建另一个位图。

如果您正在使用模拟器,则可以创建一个包含更多堆大小的设备,以添加新的额外硬件配置到您的AVD管理器中,例如VM堆大小= 32或更高。


1
这仅适用于模拟器,而不适用于真实设备,因此这不是一个解决方案。 - Daniel Benedykt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接