Android 在 setContentView 内存不足

标签 android

我制作了一个具有 6 个屏幕的全屏点击应用程序。单击后,该应用程序将离开屏幕。每个屏幕都有自己的 Activity (第 1 步、第 2 步、第 3 步等,直到第 6 步)。没有什么复杂的,布局非常简单,只有一张背景图片和一个要按的按钮。当问题开始时,我进入了屏幕 3,突然下一个屏幕不会显示,但应用程序因内存不足错误而崩溃。我试过移动到屏幕 4、5、6,但没有成功,但如果我从屏幕 3 返回到屏幕 2,那么它就可以了!有东西漏了,但我不知道是什么。背景图像很小。

我正在使用此代码在 Activity 之间切换:

Intent myIntent = new Intent(Step3.this, Step6.class); 
Step3.this.startActivity(myIntent); 
System.gc();

这是日志:

03-05 12:38:44.090: D/dalvikvm(22184): WAIT_FOR_CONCURRENT_GC blocked 0ms
03-05 12:38:44.115: D/dalvikvm(22184): GC_EXPLICIT freed 3622K, 8% free 55598K/59911K, paused 1ms+3ms, total 22ms
03-05 12:39:33.965: D/dalvikvm(22184): WAIT_FOR_CONCURRENT_GC blocked 0ms
03-05 12:39:34.040: D/dalvikvm(22184): GC_EXPLICIT freed 31K, 8% free 55633K/59911K, paused 11ms+5ms, total 74ms
03-05 12:39:34.040: I/Choreographer(22184): Skipped 2910 frames!  The application may be doing too much work on its main thread.
03-05 12:39:43.850: D/dalvikvm(22184): GC_FOR_ALLOC freed 34K, 8% free 55613K/59911K, paused 23ms, total 24ms
03-05 12:39:43.860: I/dalvikvm-heap(22184): Grow heap (frag case) to 58.364MB for 3686416-byte allocation
03-05 12:39:43.900: D/dalvikvm(22184): GC_CONCURRENT freed <1K, 7% free 59213K/63559K, paused 14ms+5ms, total 39ms
03-05 12:39:43.935: D/dalvikvm(22184): GC_FOR_ALLOC freed 0K, 7% free 59213K/63559K, paused 18ms, total 18ms
03-05 12:39:43.935: I/dalvikvm-heap(22184): Forcing collection of SoftReferences for 14745616-byte allocation
03-05 12:39:43.955: D/dalvikvm(22184): GC_BEFORE_OOM freed <1K, 7% free 59213K/63559K, paused 18ms, total 19ms
03-05 12:39:43.955: E/dalvikvm-heap(22184): Out of memory on a 14745616-byte allocation.
03-05 12:39:43.955: I/dalvikvm(22184): "main" prio=5 tid=1 RUNNABLE
03-05 12:39:43.955: I/dalvikvm(22184):   | group="main" sCount=0 dsCount=0 obj=0x413f0508 self=0x413e0468
03-05 12:39:43.955: I/dalvikvm(22184):   | sysTid=22184 nice=0 sched=0/0 cgrp=apps handle=1074609968
03-05 12:39:43.955: I/dalvikvm(22184):   | schedstat=( 1501533493 98715963 900 ) utm=116 stm=33 core=3
03-05 12:39:43.955: I/dalvikvm(22184):   at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
03-05 12:39:43.955: I/dalvikvm(22184):   at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623)
03-05 12:39:43.955: I/dalvikvm(22184):   at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:476)
03-05 12:39:43.955: I/dalvikvm(22184):   at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
03-05 12:39:43.955: I/dalvikvm(22184):   at android.content.res.Resources.loadDrawable(Resources.java:1963)
03-05 12:39:43.955: I/dalvikvm(22184):   at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
03-05 12:39:43.955: I/dalvikvm(22184):   at android.widget.ImageView.<init>(ImageView.java:120)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.widget.ImageView.<init>(ImageView.java:110)
03-05 12:39:43.960: I/dalvikvm(22184):   at java.lang.reflect.Constructor.constructNative(Native Method)
03-05 12:39:43.960: I/dalvikvm(22184):   at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.createView(LayoutInflater.java:587)
03-05 12:39:43.960: I/dalvikvm(22184):   at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
03-05 12:39:43.960: I/dalvikvm(22184):   at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:308)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.Activity.setContentView(Activity.java:1924)
03-05 12:39:43.960: I/dalvikvm(22184):   at com.frogr4g.networktrial.Step6.onCreate(Step6.java:11)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.Activity.performCreate(Activity.java:5206)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.os.Looper.loop(Looper.java:137)
03-05 12:39:43.960: I/dalvikvm(22184):   at android.app.ActivityThread.main(ActivityThread.java:4898)
03-05 12:39:43.960: I/dalvikvm(22184):   at java.lang.reflect.Method.invokeNative(Native Method)
03-05 12:39:43.960: I/dalvikvm(22184):   at java.lang.reflect.Method.invoke(Method.java:511)
03-05 12:39:43.960: I/dalvikvm(22184):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-05 12:39:43.960: I/dalvikvm(22184):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-05 12:39:43.960: I/dalvikvm(22184):   at dalvik.system.NativeStart.main(Native Method)
03-05 12:39:43.960: A/libc(22184): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 22184 (4g.networktrial)
03-05 12:39:57.150: D/dalvikvm(22766): GC_FOR_ALLOC freed 64K, 6% free 12115K/12867K, paused 34ms, total 35ms
03-05 12:39:57.155: I/dalvikvm-heap(22766): Grow heap (frag case) to 15.883MB for 3686416-byte allocation
03-05 12:39:57.170: D/dalvikvm(22766): GC_CONCURRENT freed <1K, 5% free 15714K/16519K, paused 3ms+1ms, total 14ms

编辑:我创建了一个类似的六个屏幕的应用程序,只有 textview 和一个按钮以及一个导航链 (1 --> 2 --> 3 --> 4 --> 5 --> 6 --> 1 ) 没有任何图像,它像黄油一样工作。 (正如预期的那样)。所以这肯定与图像占用大量内存有关。

最佳答案

需要注意的几件事。

  • 您是否提供了几种密度的背景图片?缩放有时会消耗大量内存。
  • 您使用的是 startActivity 还是 startActivityForResult()?在后一种情况下,您的旧 Activity 对象无法销毁。
  • 您是否在 Application 类中收集信息?

关于Android 在 setContentView 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15223054/

相关文章:

java - fragment 集可见性空指针

php - 使用 Volley 发送 post 请求并在 PHP 中接收

android - 从大位图中采样图像时如何使用 URI 而不是 resID?

android - Google Maps API key 是否缓存在 Android 上?

Android - sqlite in 子句使用数组中的字符串值?

java - 使用 sendBroadcast 并执行操作 "android.rfid.INPUT"

Android:通过使用主题,我只能为每个属性拍摄一次吗? Android 中没有类似 CSS 的东西吗?

android - 与 Arduino 一起使用 Android

java - 矩形不更新也不显示颜色

java - 安卓 : how to set listener and get position of imagebutton click in a custom adapter