首页 > 解决方案 > Android工作室Java.lang.OutOfMemoryError

问题描述

所以,我一直在创建我的项目并使用 android studio 的模拟器来运行和测试我的应用程序。工作得很好,但是在我的安卓手机上测试时我遇到了一个错误:

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;

我使用的手机的安卓版本是 7.0,相当于 24Sdk。如果需要更多信息,将提供。

标签: android-studio

解决方案


为您的项目分配特定数量的堆内存: 打开位于以下位置的文件:

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 中,您还可以通过访问“帮助”菜单中的“编辑自定义 VM 选项”来创建/编辑此文件。

Wesley 在 2015 年 2 月 26 日的回答 Android Studio - 如何增加分配的堆大小


推荐阅读