Android studio Java .lang.OutOfMemoryError - PullRequest
       4

Android studio Java .lang.OutOfMemoryError

0 голосов
/ 27 января 2020

Итак, я создавал свой проект и использовал эмулятор из android studio для запуска и тестирования моего приложения. Работало отлично, но при тестировании на моем телефоне android я обнаружил ошибку:

java.lang.OutOfMemoryError: Failed to allocate a 51321612 byte allocation with 16767424 free bytes 
    and 37MB until OOM
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:700)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:535)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1179)
    at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:770)
    at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:621)
    at android.content.res.Resources.loadDrawable(Resources.java:1727)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:945)
    at android.widget.ImageView.<init>(ImageView.java:157)
    at android.widget.ImageView.<init>(ImageView.java:145)
    at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:72)
    at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:68)
    at androidx.appcompat.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:187) 
    at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:107)
    at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
    at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:865)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:873
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:873)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:873
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
    at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1011)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:525)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:427)

Я пытаюсь это исправить, но мне нужна помощь. Вот мой код дизайна:

   <androidx.cardview.widget.CardView
    android:layout_margin="10dp"
    app:cardCornerRadius="50dp"
    app:cardElevation="0dp"
    android:layout_width="300dp"
    android:layout_height="125dp">

    <ImageView
     android:id="@+id/FullBody"
     tools:ignore="ContentDescription"
     android:src="@drawable/full"
     android:scaleType="centerCrop"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     > </ImageView>

Вот версия android studio, которую я использую:

    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
    applicationId "com.example.gymtastic"
    minSdkVersion 17
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 
    multiDexEnabled true;

Телефон, который я использую, имеет android версию 7.0, что эквивалентно 24Sdk. Если потребуется дополнительная информация, предоставим.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Чтобы выделить конкретный c объем памяти кучи для вашего проекта: Откройте файл, расположенный по адресу:

C:\Program Files\Android\Android Studio\bin\studio.exe.vmoptions

Измените это содержимое на:

-Xms128m
-Xmx4096m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=200m
-XX:+UseCompressedOops

"

Xmx задает максимальный пул выделения памяти для виртуальной машины Java (JVM), а Xms задает начальный пул выделения памяти. Ваша JVM будет запущена с объемом памяти Xms и сможет использовать максимум Объем памяти xmx.

В Android Studio 2.0 вы также можете создать / отредактировать этот файл, открыв «Редактировать пользовательские параметры виртуальной машины» в меню «Справка».

Ответ Уэсли в феврале 26 '15 Android Studio - Как увеличить размер выделенной кучи

0 голосов
/ 28 января 2020

Обычно эта ошибка выдается, когда виртуальная машина Java не может выделить объект, потому что ему не хватает памяти, и сборщик мусора не может выделить больше памяти.

Вы можете запросить с помощью этого

android:largeHeap="true"

увеличьте размер кучи. Просто поместите эту строку в элемент приложения вашего Android .Manifest файла, подобного этому

<application
android:largeHeap="true"
.
.
.>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...