Ice Cream Sandwich 中的 java.lang.OutOfMemoryError

标签 java android bitmap

我一直在网上搜索这个。我似乎找不到正确的事情要做。

我们使用“开始 Android 游戏”一书制作了一个 2d 滚动 Android 游戏。到目前为止,一切都很顺利,但是当我们添加大量位图时,游戏在所有设备上都会崩溃。所以我们删除了位图,它在 Gingerbread 、蜂窝和软糖设备上运行。但它在 ICE CREAM SANDWICH 设备上并没有真正起作用,我感到很沮丧。

希望你能帮助我。

这是 logcat 错误:

09-23 11:22:54.866: E/AndroidRuntime(3525): java.lang.OutOfMemoryError
09-23 11:22:54.866: E/AndroidRuntime(3525): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
09-23 11:22:54.866: E/AndroidRuntime(3525): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:483)
09-23 11:22:54.866: E/AndroidRuntime(3525): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:549)
09-23 11:22:54.866: E/AndroidRuntime(3525): at framework.implementation.AndroidGraphics.newPixmap(AndroidGraphics.java:49)
09-23 11:22:54.866: E/AndroidRuntime(3525): at game.LoadingScreen.update(LoadingScreen.java:27)
09-23 11:22:54.866: E/AndroidRuntime(3525): at framework.implementation.AndroidFastRenderView.run(AndroidFastRenderView.java:48)
09-23 11:22:54.836: E/dalvikvm-heap(3525): Out of memory on a 3840016-byte allocation.

增长堆上升到 33.98MB

最佳答案

1.实际上你大部分时间都在使用图像。在 andorid 中,图像由 Bitmap 处理,因此这些位图将消耗更多的“堆内存”,因为每次更改图像时都会创建更多的位图对象。所以我们必须使用“对象池方法”来避免 java.lang.OutOfMemoryError 异常。

这是链接,如何创建对象池。

链接:http://www.devahead.com/blog/2011/12/recycling-objects-in-android-with-an-object-pool-to-avoid-garbage-collection/

2.在4.X android版本的设备中,您可以在设置中看到“开发者设置”。在开发人员设置中,您必须启用“不保留 Activity ”,这会尽快销毁后台的所有 Activity 。

在这种情况下,您的应用 Activity 不应该崩溃,如果它崩溃了,您的 Activity 就不会遵循 Android Activity 生命周期。

这里的链接供您引用:http://developer.android.com/training/basics/activity-lifecycle/index.html

关于 Ice Cream Sandwich 中的 java.lang.OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18951368/

相关文章:

php - 如何将图像保存到 android 中的 SQLite 数据库?

java - 重定向表单 jsf 托管 bean 并根据托管 bean 中的条件显示 js 警报

java - 如何在 Java 中使用 PortAudio 绘制波形(带有处理功能的 jpab)?

java - 与 jpa 2.0 和 GAE 数据存储的一对多关系

android 多点触控图像缩放?

CUDA-C导入位图图像

java - C++ 相当于 Java 的 this.getClass().getSimpleName();

android - 更改 Android 中 CollapsingToolbarLayout 中工具栏标题的字体大小

java - 如何在 Android 应用程序中使用现有数据库

Android:如何阻止 Android 1.6+ 缩放图像