DrawableAnimation wirft OutOfMemory Error auf

  • Antworten:3
Ford Prefect
  • Forum-Beiträge: 29

16.05.2017, 12:06:09 via Website

Hallihallo,
in meiner App wirft eine DrawableAnimation diesen OutofMemorie Error auf:

05-16 11:49:24.169 2501-2501/slartbart.example E/AndroidRuntime: FATAL EXCEPTION: main
Process: slartbart.example, PID: 2501
java.lang.OutOfMemoryError: Failed to allocate a 4387392 byte allocation with 4063064 free bytes and 3MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
at android.content.res.Resources.loadDrawable(Resources.java:858)
at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
at android.graphics.drawable.AnimationDrawable.inflateChildElements(AnimationDrawable.java:327)
at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:297)
at android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
at android.content.res.Resources.getDrawable(Resources.java:771)
at android.content.Context.getDrawable(Context.java:525)
at android.view.View.setBackgroundResource(View.java:18228)
at android.support.v7.widget.AppCompatImageView.setBackgroundResource(AppCompatImageView.java:86)
at slartbart.example.GameActivity.gameOver(GameActivity.java:483)
at slartbart.example.GameActivity.onCreate(GameActivity.java:81)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Das hier ist die dazugehörige Methode:

public void gameOver(){
    gameImages.setBackgroundResource(R.drawable.animation_game_over_list);
    gambleAnimation = (AnimationDrawable) gameImages.getBackground();
    gambleAnimation.start();
}

Getestet habe ich das ganze auf meinem Nexus6 und in dem Emulator...

Gibt es eine Möglichkeit meiner App mehr Speicherplatz zuzuweisen, oder andere Möglichkeiten das Problem zu lösen ?
Mit freundlichen grüßen,
Ford.

— geändert am 16.05.2017, 12:07:49

Antworten
swa00
  • Forum-Beiträge: 3.704

16.05.2017, 12:12:11 via Website

Hallo Ford,

ich habe Dir in einem älteren Thread schon genaustens beschrieben, wo die Lösung liegt :-)

Mal schauen , ob du ihn findest ( ist erst ein paar Tage her ) :-)

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Ford Prefect
  • Forum-Beiträge: 29

16.05.2017, 12:50:02 via Website

Meintest du Assets?
Ok ich hab das immer noch nicht geblickt, wie das funktioniert. Ich hab damals den assets directory erstell, doch AS hat diesen nich akzeptiert...
Dann werd ich das wohl lernen müssen :)

Antworten
Ford Prefect
  • Forum-Beiträge: 29

16.05.2017, 14:07:21 via Website

ich hab das mit den Assets jetzt mal probiert, und das gibt mir jetzt ne NullPointerException aus:

public class GameActivity extends AppCompatActivity implements View.OnClickListener {

InputStream is;
AssetManager assetManager;


public void gameOver(){
    try{
        is = assetManager.open("img/game_over9.png");
        Bitmap bitmap = BitmapFactory.decodeStream(is);
        gameImages.setImageBitmap(bitmap);
    }catch(IOException e){
        e.printStackTrace();
        Log.w("GameActivity", "IOException ocurred");
    }

}

}

Ich hab das ganze mal gekürzt.
und der fehlercode lautet:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: slartbart.example, PID: 22793
java.lang.RuntimeException: Unable to start activity ComponentInfo{slartbart.example/slartbart.example.GameActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.InputStream android.content.res.AssetManager.open(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2684)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1496)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6186)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.InputStream android.content.res.AssetManager.open(java.lang.String)' on a null object reference
at slartbart.example.GameActivity.gameOver(GameActivity.java:491)
at slartbart.example.GameActivity.onCreate(GameActivity.java:88)
at android.app.Activity.performCreate(Activity.java:6684)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2637)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1496) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6186) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

Muss ich jetzt den Inputstream in meiner onCreate initialisieren, oder was heißt das?
Sorry, dass ich hier so viele Anfängerfragen stelle, aber ich hab leider echt keinen Plan von so was und muss noch sehr viel lernen.:(

Antworten