Я попытался это: OutOfMemoryErrorOutOfMemoryError при загрузке анимации
и читать многие другие подобные сообщения, но ни один из них не работал
Это ошибка:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lud.root.jetfighter, PID: 19789
java.lang.OutOfMemoryError: Failed to allocate a 4940652 byte allocation with 2168368 free bytes and 2MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:651)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:486)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1085)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2879)
at android.content.res.Resources.loadDrawable(Resources.java:2768)
at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
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:1220)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1129)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2874)
at android.content.res.Resources.loadDrawable(Resources.java:2768)
at android.content.res.Resources.getDrawable(Resources.java:932)
at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:133)
at android.content.Context.getDrawable(Context.java:465)
at android.view.View.setBackgroundResource(View.java:17566)
at android.support.v7.widget.AppCompatImageView.setBackgroundResource(AppCompatImageView.java:76)
at com.lud.root.jetfighter.Instruction.onCreate(Instruction.java:32)
at android.app.Activity.performCreate(Activity.java:6583)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1114)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2531)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2666)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1493)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5769)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
I/System: FinalizerDaemon: finalize objects = 381
Чтение некоторых другие сообщения, которые я узнал о больших растровых изображениях, превышающих предел памяти, но файлы слишком малы, чтобы, как я полагаю, превышать лимит (они имеют максимальные файлы размером от 8 до 12 кБ)
Я прочитал много сообщений, ссылающихся на проблему с растровым изображением, но никто не мог мне помочь.
Я попытался это: android:largeHeap="true"
Но так как он не работал, я прочитал еще одну статью, и предложил, чтобы удалить его, так что я сделал это.
Мой Instuction.java файл, который запускается в ошибку:
setContentView(R.layout.activity_instruction);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ll = (LinearLayout)findViewById(R.id.instruction);
ll.setOnClickListener(this);
imv1 = (ImageView) findViewById(R.id.instruction_imv1);
imv3 = (ImageView) findViewById(R.id.instruction_imv3);
imv1.setBackgroundResource(R.drawable.inst); // **This is where error occurs**
imv3.setBackgroundResource(R.drawable.collision);
tap = (AnimationDrawable) imv1.getBackground();
tap.start();
collision = (AnimationDrawable) imv3.getBackground();
collision.start();
Я загрузил 22 файлов для инст анимации.
Это мой inst.xml файл:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/selected" android:oneshot="false">
<item android:drawable="@drawable/enlarge001" android:duration="100" />
<item android:drawable="@drawable/enlarge002" android:duration="100" />
<item android:drawable="@drawable/enlarge003" android:duration="100" />
<item android:drawable="@drawable/enlarge005" android:duration="100" />
<item android:drawable="@drawable/enlarge006" android:duration="100" />
<item android:drawable="@drawable/enlarge007" android:duration="100" />
<item android:drawable="@drawable/enlarge008" android:duration="100" />
<item android:drawable="@drawable/enlarge009" android:duration="100" />
<item android:drawable="@drawable/enlarge010" android:duration="100" />
<item android:drawable="@drawable/enlarge011" android:duration="100" />
<item android:drawable="@drawable/enlarge012" android:duration="100" />
<item android:drawable="@drawable/enlarge013" android:duration="100" />
<item android:drawable="@drawable/enlarge014" android:duration="100" />
<item android:drawable="@drawable/enlarge015" android:duration="100" />
<item android:drawable="@drawable/enlarge016" android:duration="100" />
<item android:drawable="@drawable/enlarge017" android:duration="100" />
<item android:drawable="@drawable/enlarge018" android:duration="100" />
<item android:drawable="@drawable/enlarge020" android:duration="100" />
<item android:drawable="@drawable/enlarge021" android:duration="100" />
<item android:drawable="@drawable/enlarge022" android:duration="100" />
</animation-list>
'Не удалось выделить выделение 4,940,652 байт с помощью бесплатных 2.168.368 байт и 2 МБ до тех пор, пока OOM' Сколько файлов вы не загрузили? – AxelH
Потенциально эта линия может быть просто верхушкой айсберга. Высокое потребление памяти может быть в какой-то другой части кода. – raxelsson
Вы можете использовать монитор памяти в Android Studio для отслеживания ваших распределений. Возможно, у вас есть огромные объекты, которые не могут быть собраны в мусор, из-за утечки памяти. Наиболее распространенными просочившимися объектами являются контексты и растровые изображения. Вы также можете попробовать библиотеку LeakCanary, которая предупреждает вас об утечке памяти. –