Out of Memory

Hi,
Ich bin aktuell wieder mit einem Out of Memory am Kämpfen.

I/dalvikvm(12842): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm(12842):   | group="main" sCount=0 dsCount=0 obj=0x41a10d80 self=0x419ff4f8
I/dalvikvm(12842):   | sysTid=12842 nice=0 sched=0/0 cgrp=apps handle=1075282260
I/dalvikvm(12842):   | state=R schedstat=( 0 0 0 ) utm=299 stm=131 core=0
I/dalvikvm(12842):   at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
I/dalvikvm(12842):   at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
I/dalvikvm(12842):   at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
I/dalvikvm(12842):   at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
I/dalvikvm(12842):   at android.content.res.Resources.loadDrawable(Resources.java:2137)
I/dalvikvm(12842):   at android.content.res.Resources.getDrawable(Resources.java:700)
I/dalvikvm(12842):   at com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:699)
I/dalvikvm(12842):   at com.android.internal.policy.impl.PhoneWindow.setDefaultIcon(PhoneWindow.java:1496)
I/dalvikvm(12842):   at android.app.Activity.initActionBar(Activity.java:1915)
I/dalvikvm(12842):   at android.app.Activity.getActionBar(Activity.java:1893)
I/dalvikvm(12842):   at de.treevo.app.main_list.onCreate(main_list.java:54)
I/dalvikvm(12842):   at android.app.Activity.performCreate(Activity.java:5231)
I/dalvikvm(12842):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
I/dalvikvm(12842):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)
I/dalvikvm(12842):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
I/dalvikvm(12842):   at android.app.ActivityThread.access$800(ActivityThread.java:145)
I/dalvikvm(12842):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
I/dalvikvm(12842):   at android.os.Handler.dispatchMessage(Handler.java:102)
I/dalvikvm(12842):   at android.os.Looper.loop(Looper.java:136)
I/dalvikvm(12842):   at android.app.ActivityThread.main(ActivityThread.java:5081)
I/dalvikvm(12842):   at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm(12842):   at java.lang.reflect.Method.invoke(Method.java:515)
I/dalvikvm(12842):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
I/dalvikvm(12842):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
I/dalvikvm(12842):   at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm(12842): ```

Der Fehler tritt in einem Layout mit Gridview auf, also habe ich mir gedacht das Problem sind die Bilder, die in die Gridview geladen werden. Das scheint nicht so der Fehler tritt auch auf wenn keine Bilder geladen werden.
Die Bilder werden mit Picasso geladen.
```        Picasso.with(mContext) //
               .load(new File(list.get(position)))
                .placeholder(R.drawable.loading)
                .error(R.drawable.not_found)
                .into(imageView);

Was könnte noch der Auslöser sein? Bitmaps verwende ich in der Klasse nicht.

mfg ternes3

Am einfachsten ist es wenn du mit dem Memory Analyzer mal hinein schaust. Ich hab hier eine kleine Anleitunggeschrieben.

Aber deine Exception zeigt sehr deutlich, dass das App-Icon das Fass zum überlaufen bringt. Ist das denn tatsächlich so groß?

Danke für die Antwort. Ja, das App Logo ist groß ich habe es mal verkleinert und dann bin ich nach deiner Anleitung vorgegangen.
Platz 1 im Histogramm ist byte[] und dann android.graphics.Bitmap. Mit byte[] kann ich nicht wirklich viel Anfangen.

mfg ternes3

Stimmt, mit byte[] kann man nicht viel anfangen. Aber du kannst dir anschauen wo die Bitmaps herkommen bzw. verwendet werden. Dort musst du dann optimieren.


Mir kommt die Zahl 14.8 ungewöhnlich groß für byte[] vor. Kann das sein?

mfg ternes3

Hm, das schaut eigentlich alles relativ normal aus. Ich hab jetzt kein Eclipse vor mir aber du solltest irgendwo genauer reinschauen können wo denn die jeweiligen Objekte (Bitmap, byte[], etc.) im Code verwendet werden.

Damit solltest du dann ermittelt können ob das gut bzw. schlecht ist.