Problem mit Activity(LogCat)

  • 4 Antworten
  • Letztes Antwortdatum
S

schornstein

Neues Mitglied
0
Hallo Leute, ich habe ein kleines Problem.
Und zwar habe ich in meiner App vier Activitys, in jeder Activity lade ich 2 große Bilder in zwei Framelayouts.
Wenn ich die Activitys nacheinander öffne, stürzt die vierte Activity ab.

Hier ein Teil der LogCat Ausgabe:


01-16 19:00:25.418: I/dalvikvm-heap(1037): Grow heap (frag case) to 43.072MB for 4320016-byte allocation
01-16 19:00:25.758: D/dalvikvm(1037): GC_CONCURRENT freed <1K, 1% free 44057K/44231K, paused 82ms+30ms, total 342ms
01-16 19:00:25.908: D/dalvikvm(1037): GC_FOR_ALLOC freed 0K, 1% free 44057K/44231K, paused 130ms, total 130ms
01-16 19:00:25.908: I/dalvikvm-heap(1037): Forcing collection of SoftReferences for 9720016-byte allocation
01-16 19:00:26.088: D/dalvikvm(1037): GC_BEFORE_OOM freed 9K, 1% free 44048K/44231K, paused 180ms, total 181ms
01-16 19:00:26.088: E/dalvikvm-heap(1037): Out of memory on a 9720016-byte allocation.
01-16 19:00:26.098: I/dalvikvm(1037): "main" prio=5 tid=1 RUNNABLE
01-16 19:00:26.098: I/dalvikvm(1037): | group="main" sCount=0 dsCount=0 obj=0x40a14568 self=0x2a00b9e0
01-16 19:00:26.098: I/dalvikvm(1037): | sysTid=1037 nice=0 sched=0/0 cgrp=apps handle=1073870640
01-16 19:00:26.159: I/dalvikvm(1037): | schedstat=( 8136067800 7774180504 1549 ) utm=618 stm=193 core=0
01-16 19:00:26.159: I/dalvikvm(1037): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-16 19:00:26.167: I/dalvikvm(1037): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
01-16 19:00:26.167: I/dalvikvm(1037): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
01-16 19:00:26.178: I/dalvikvm(1037): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
01-16 19:00:26.178: I/dalvikvm(1037): at android.content.res.Resources.loadDrawable(Resources.java:1930)
01-16 19:00:26.188: I/dalvikvm(1037): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
01-16 19:00:26.188: I/dalvikvm(1037): at android.view.View.<init>(View.java:3336)
01-16 19:00:26.198: I/dalvikvm(1037): at android.view.ViewGroup.<init>(ViewGroup.java:427)
01-16 19:00:26.218: I/dalvikvm(1037): at android.widget.FrameLayout.<init>(FrameLayout.java:101)
01-16 19:00:26.228: I/dalvikvm(1037): at android.widget.FrameLayout.<init>(FrameLayout.java:97)
01-16 19:00:26.247: I/dalvikvm(1037): at java.lang.reflect.Constructor.constructNative(Native Method)
01-16 19:00:26.247: I/dalvikvm(1037): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
01-16 19:00:26.258: I/dalvikvm(1037): at android.view.LayoutInflater.createView(LayoutInflater.java:587)
01-16 19:00:26.278: I/dalvikvm(1037): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
01-16 19:00:26.287: I/dalvikvm(1037): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
01-16 19:00:26.287: I/dalvikvm(1037): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
01-16 19:00:26.308: I/dalvikvm(1037): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
01-16 19:00:26.308: I/dalvikvm(1037): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
01-16 19:00:26.318: I/dalvikvm(1037): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-16 19:00:26.338: I/dalvikvm(1037): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-16 19:00:26.338: I/dalvikvm(1037): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
01-16 19:00:26.338: I/dalvikvm(1037): at android.app.Activity.setContentView(Activity.java:1867)
01-16 19:00:26.349: I/dalvikvm(1037): at com.example.wallevading.Level4.onCreate(Level4.java:48)
01-16 19:00:26.349: I/dalvikvm(1037): at android.app.Activity.performCreate(Activity.java:5008)
01-16 19:00:26.349: I/dalvikvm(1037): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-16 19:00:26.368: I/dalvikvm(1037): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-16 19:00:26.368: I/dalvikvm(1037): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-16 19:00:26.368: I/dalvikvm(1037): at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-16 19:00:26.388: I/dalvikvm(1037): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-16 19:00:26.388: I/dalvikvm(1037): at android.os.Handler.dispatchMessage(Handler.java:99)
01-16 19:00:26.388: I/dalvikvm(1037): at android.os.Looper.loop(Looper.java:137)
01-16 19:00:26.388: I/dalvikvm(1037): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-16 19:00:26.388: I/dalvikvm(1037): at java.lang.reflect.Method.invokeNative(Native Method)
01-16 19:00:26.388: I/dalvikvm(1037): at java.lang.reflect.Method.invoke(Method.java:511)
01-16 19:00:26.388: I/dalvikvm(1037): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-16 19:00:26.388: I/dalvikvm(1037): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-16 19:00:26.388: I/dalvikvm(1037): at dalvik.system.NativeStart.main(Native Method)
01-16 19:00:26.388: A/libc(1037): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 1037 (ple.wallevading)


Ich denke mal, die dick geschriebenen Zeilen sind die wichtigsten.
Wieso ist meine App "out of memory" und kann das der Grund sein wieso meine App abstürzt?
Wenn ja, wie kann ich diesen Speicher "reseten"?

LG
 
Deine Bitmaps sind zu groß. Bitmaps allokieren nativen speicher, der nicht vom GC direkt gemanaged wird und davon bekommt jedes VM nur einen gewissen Anteil, wird dieser überschritten bekommst du eine OutOfMemoryException und deiner Anwendung wird, wenn du diese nicht fängst wegen einer unbehandelten Exception beendet.

Du wirst die Bitmaps skallieren müssen, hier wird erklärt wie das am einfachsten geht:

Android..:): Solving the "bitmap size exceeds VM budget error"
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: schornstein
Danke für den Link.
Kann ich diesen Speicher nicht einfach löschen bzw auf 0 setzen?
 
Theoretisch könntest du im onPause die Bitmaps wieder aus dem frame layout löschen und in on resume wieder laden. Aber wenn du den beschrieben weg gehst laden die Bilder auch schneller und der garbage collector hat weniger Arbeit da du nicht ständig Bitmaps löscht und lädst.

Gesendet von meinem GT-I9100 mit der Android-Hilfe.de App
 
ok
ich versuche dann mal den beschriebenen weg umzusetzen

danke
 
Zurück
Oben Unten