2017-01-13 2 views
-1

Ich bin neu in Android Studio und ich entwickle mein erstes Projekt.Heap will die Größe nicht ändern (java.lang.OutOfMemoryError) android studio

Mein Problem ist, dass jedes Mal, wenn ich versuche, apk auf dem Handy ausführen, bekomme ich eine java.lang.OutOfMemoryError. Ich habe verschiedene Möglichkeiten ausprobiert, um das zu beheben, aber nichts davon scheint zu funktionieren.

Hier ist meine Konsolenprotokoll Fehlerbericht:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.prvaaplikacija.gametutorial, PID: 32565 
       java.lang.OutOfMemoryError: Failed to allocate a 17013900 byte allocation with 13104128 free bytes and 12MB until OOM 
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:613) 
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:446) 
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080) 
        at android.content.res.Resources.createFromResourceStream(Resources.java:2952) 
        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2684) 
        at android.content.res.Resources.loadDrawable(Resources.java:2580) 
        at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:387) 
        at android.content.res.TypedArray.getDrawable(TypedArray.java:872) 
        at android.graphics.drawable.AnimationDrawable.inflateChildElements(AnimationDrawable.java:324) 
        at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:294) 
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1217) 
        at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1126) 
        at android.content.res.Resources.createFromXml(Resources.java:2964) 
        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2676) 
        at android.content.res.Resources.loadDrawable(Resources.java:2580) 
        at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:387) 
        at android.content.res.Resources.getDrawable(Resources.java:824) 
        at android.content.Context.getDrawable(Context.java:467) 
        at android.view.View.setBackgroundResource(View.java:17225) 
        at android.support.v7.widget.AppCompatImageView.setBackgroundResource(AppCompatImageView.java:86) 
        at com.example.prvaaplikacija.gametutorial.main.onCreate(main.java:125) 
        at android.app.Activity.performCreate(Activity.java:6303) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483) 
        at android.app.ActivityThread.access$900(ActivityThread.java:153) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5441) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 

ich eine gradle.properties Datei in C: \ Benutzer \ user.gradle und es sieht wie folgt aus:

org.gradle.daemon=true 
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 
org.gradle.parallel=true 
org.gradle.configureondemand=true 

Mein lokaler gradle.properties Datei sieht wie folgt aus:

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

Aber wenn ich über sie mit der Maus hoover es gibt mir mir eine Notiz von unused property.

Ich habe diesen Code zu meiner build.gradle-Datei hinzugefügt und einige Variationen von Optionen mit ihm versucht, aber es funktioniert immer noch nicht.

dexOptions { 
    preDexLibraries = false; 
    incremental true 
    javaMaxHeapSize "4g" 
} 

Und:

multiDexEnabled true 

ich versucht habe, meine gradle Cache zu löschen, indem Sie manuell zu löschen und alle meine Aktionen haben jede Änderung nicht.

Ich würde es wirklich schätzen, wenn jemand mir mit meinem Problem helfen könnte. Ich stecke seit ein paar Tagen darauf und ich denke, dass ich alleine nichts mehr tun kann, um das zu lösen.

+0

Es scheint, dass Sie in Ihrem onCreate() zu wenig Speicher haben. Können Sie den relevanten Code teilen? (main.java - onCreate()) –

Antwort

1

Ihre Versuche, Dinge zu reparieren, würde eine OutOfMemoryError auf Ihrem Entwicklungsgerät beheben. Ihr Absturz kommt auf dem Android-Gerät, weil Ihre App nicht mehr genügend Arbeitsspeicher hat.

Insbesondere einig ziehbar Ressource, die Sie versuchen, — als Hintergrund zu laden (?) Ein ImageView — wird auf 17.013.900 Bytes Heap-Speicher nehmen, und Sie keinen freien Block von Heap-Speicher so groß haben .

17013900 Byte entspricht einem 2062x2062 Pixel Bild. Dies ist viel zu groß.

So:

  • Finden Sie heraus, was ziehbar Ressource ist dies

  • Wenn Sie die Ressource in res/drawable/ setzen, wählen Sie ein entsprechendes Verzeichnis (entweder eine Dichte spezifische Verzeichnis wie res/drawable-xhdpi/ oder vielleicht res/drawable-nodpi/ zu sagen, dass Android es nicht basierend auf Bildschirmdichte konvertieren sollte)

  • Wenn die Auflösung des Bildes groß ist, verkleinern Sie

+0

Ich glaube, ich verstehe jetzt mehr von meinem Problem. Ich habe einen animierten Hintergrund erstellt, der aus 28 Frames besteht und 743,659 B Speicherplatz benötigt. Also sollte ich einfach ein weiteres aufklappbares Verzeichnis machen und den Saum einnähen? – Mithor

+0

@Mithor: Ich empfehle Ihnen, [die Dokumentation zur Unterstützung von mehreren Bildschirmgrößen und -dichten] (https://developer.android.com/guide/practices/screens_support.html) zu lesen und dann zu entscheiden, wie mit diesem Hintergrund umgegangen wird. – CommonsWare

Verwandte Themen