Member 12299159 Ответов: 2

Как увеличить размер кучи android-приложения?


Hi, I am performing animation in android application. When running the my application is crash and getting OutOfMemoryException. The error are, java.lang.OutOfMemoryError: Failed to allocate a 9437196 byte allocation with 3044192 free bytes and 2MB until OOM
My Logcat are given below,
8:05.256 9298-9298/ayurjanaapp.dell.xerces.com.ayurjnanaapp E/AndroidRuntime: FATAL EXCEPTION: main
          Process: ayurjanaapp.dell.xerces.com.ayurjnanaapp, PID: 9298
          java.lang.OutOfMemoryError: Failed to allocate a 9437196 byte allocation with 3044192 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:609)
              at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
              at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
              at android.content.res.Resources.loadDrawableForCookie(Resources.java:2638)
              at android.content.res.Resources.loadDrawable(Resources.java:2543)
              at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
              at android.widget.ImageView.<init>(ImageView.java:162)
              at android.widget.ImageView.<init>(ImageView.java:150)
              at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:57)
              at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:53)
              at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)
              at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1013)
              at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1072)
              at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:746)
              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)
              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
              at android.view.LayoutInflater.rInflate(LayoutInflater.java:838)
              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
              at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
              at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393)
              at android.app.Dialog.setContentView(Dialog.java:512)
              at ayurjanaapp.dell.xerces.com.ayurjnanaapp.AnimationForSubsequentBellsActivity.showBellDialog(AnimationForSubsequentBellsActivity.java:41)
              at ayurjanaapp.dell.xerces.com.ayurjnanaapp.AnimationForSubsequentBellsActivity.onCreate(AnimationForSubsequentBellsActivity.java:31)
              at android.app.Activity.performCreate(Activity.java:6259)
              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
              at android.app.ActivityThread.access$900(ActivityThread.java:154)
              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
              at android.os.Handler.dispatchMessage(Handler.java:102)
              at android.os.Looper.loop(Looper.java:148)
              at android.app.ActivityThread.main(ActivityThread.java:5443)
              at java.lang.reflect.Method.invoke(Native Method)
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
  12-05 10:4
So, please help me for solving this above problem. Thank you.


Что я уже пробовал:

I tried to add largeHeap=true statement in my manifest file, but this is not the right solution. 

Richard MacCutchan

OutOfMemoryException обычно это происходит потому, что вы израсходовали всю доступную физическую память. Увеличение размера кучи не поможет. Вам нужно выяснить, почему ваше приложение использует так много памяти, и исправить это.

Member 12299159

В своем приложении я выполняю анимацию изображений. При запуске анимации она падает и выдает исключение OutOfMemoryException. Как я решаю?

Richard MacCutchan

Вы решаете ее, не пытаясь использовать память, которой не существует.

2 Ответов

Рейтинг:
1

ridoy

Существует несколько способов проверить решение проблемы:
Ява.яз.Решение OutOfMemoryError[^]


Рейтинг:
0

Patrice T

Цитата:
Не удалось выделить выделение 9437196 байт с 3044192 свободными байтами
Ваше приложение пытается выделить всю физическую память и многое другое.
Вам нужно выяснить, где и почему вашему приложению нужно так много памяти, у вас может быть утечка памяти или вы не освобождаете память, когда она вам больше не нужна.
Единственный полезный совет - использовать отладчик и ставить точки останова на ключевых частях приложения, чтобы определить, где оно съедает память. По мере получения знаний переместите точки останова в интересные части, чтобы продолжить исследование. Затем изучите код, чтобы понять, почему приложению нужно так много памяти.
Это утомительная работа, и мы не можем сделать ее за вас. Первая очевидная причина заключается в том, что у нас нет приложения.
-----
Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.