在进入android中的下一个活动时出现内存错误

时间:2014-08-11 12:58:54

标签: android

我开发了一个应用程序,我有几个活动。每个活动分为布局,左侧布局包含特定图像的逐帧动画,右侧布局包含运行时画布视图,当我完成任务并移动到下一个活动时,它会收到错误OutofMemoryError ....有时它会在移动时发生从第一个活动到第二个活动,或者当它将第三个活动传递给第四个活动时它也会出错。(有时它不会导致从第一个移动到第二个活动,第二个移动到第二个活动)。 得到错误像这样:

08-11 08:24:11.176: E/AndroidRuntime(859): java.lang.OutOfMemoryError
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:503)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:356)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:800)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.content.res.Resources.loadDrawable(Resources.java:2105)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.content.res.Resources.getDrawable(Resources.java:695)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:901)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:837)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.content.res.Resources.loadDrawable(Resources.java:2087)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.content.res.Resources.getDrawable(Resources.java:695)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.view.View.setBackgroundResource(View.java:14758)
08-11 08:24:11.176: E/AndroidRuntime(859):  at com.mypack.capitalAlphabets.ActivityD.onCreate(ActivityD.java:28)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.Activity.performCreate(Activity.java:5133)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.os.Looper.loop(Looper.java:137)
08-11 08:24:11.176: E/AndroidRuntime(859):  at android.app.ActivityThread.main(ActivityThread.java:5103)
08-11 08:24:11.176: E/AndroidRuntime(859):  at java.lang.reflect.Method.invokeNative(Native Method)
08-11 08:24:11.176: E/AndroidRuntime(859):  at java.lang.reflect.Method.invoke(Method.java:525)
08-11 08:24:11.176: E/AndroidRuntime(859):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-11 08:24:11.176: E/AndroidRuntime(859):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-11 08:24:11.176: E/AndroidRuntime(859):  at dalvik.system.NativeStart.main(Native Method)
08-11 08:29:11.335: I/Process(859): Sending signal. PID: 859 SIG: 9
08-11 08:29:13.265: D/gralloc_goldfish(904): Emulator without GPU emulation detected.

4 个答案:

答案 0 :(得分:0)

您应该处理位图回收。基于异常,看起来你正在用重型位图一遍又一遍地填充内存。但是如果没有看到代码,我就说不出更多。

请看这里:http://developer.android.com/training/displaying-bitmaps/index.html

答案 1 :(得分:0)

如果我是对的,你正在查看活动中的图像(很可能是多个图像)。图像的大小非常大,这就是为什么它会抛出掉掉错误的错误。您应该根据大小和需要控制图像的大小和属性。您还可以搜索方法来回收内存..您还可以使用onLowMemory方法并停止崩溃应用程序并显示一些错误对话框..但是是的控制你的形象的大小和属性

答案 2 :(得分:0)

您正在使用的图像可能是非常大的尺寸。降低分辨率,看看您是否仍然观察到这个问题。 还要确保你没有泄漏任何位图.. 尽可能回收位图以释放与图像相关的本机内存

Natïve堆在运行的应用程序之间共享,因此可用空间量取决于正在运行的其他应用程序及其位图使用情况。 您可以找到已分配的本机堆,并根据可用的堆分配资源:

参见: long nativeHeapAllocated = Debug.getNativeHeapAllocatedSize();

请参阅此内容以了解有关本机堆分配的更多信息:http://sourcevirtues.wordpress.com/2013/01/14/java-heap-space-and-native-heap-problems/

答案 3 :(得分:0)

在转移到下一个活动时,堆内存退出会出现内存不足错误。我的建议是,将所有使用过的位图清除为 null 回收您的位图,如@Deimos所说

bitmap.recycle();
bitmap=null;

请参阅该链接以获得更多说明link1 link2

在我的项目中出现相同的内存不足,我正在使用位图图像到我的imageview以获取所有下一级别。所以我所做的意味着当我切换到下一级时,我将所有位图资源清空为null,它对我有用。