Heap不想改变大小(java.lang.OutOfMemoryError)android studio

时间:2017-01-13 18:53:18

标签: java android android-studio gradle out-of-memory

我是android studio的新手,我正在开发我的第一个项目。

我的问题是,每当我尝试在手机上运行apk时,我会得到一个java.lang.OutOfMemoryError。我尝试了各种方法来解决这个问题,但似乎都没有。

这是我的控制台日志错误报告:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.prvaaplikacija.gametutorial, PID: 32565
              java.lang.OutOfMemoryError: Failed to allocate a 17013900 byte allocation with 13104128 free bytes and 12MB until OOM
                  at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:613)
                  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:446)
                  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
                  at android.content.res.Resources.createFromResourceStream(Resources.java:2952)
                  at android.content.res.Resources.loadDrawableForCookie(Resources.java:2684)
                  at android.content.res.Resources.loadDrawable(Resources.java:2580)
                  at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:387)
                  at android.content.res.TypedArray.getDrawable(TypedArray.java:872)
                  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:1217)
                  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1126)
                  at android.content.res.Resources.createFromXml(Resources.java:2964)
                  at android.content.res.Resources.loadDrawableForCookie(Resources.java:2676)
                  at android.content.res.Resources.loadDrawable(Resources.java:2580)
                  at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:387)
                  at android.content.res.Resources.getDrawable(Resources.java:824)
                  at android.content.Context.getDrawable(Context.java:467)
                  at android.view.View.setBackgroundResource(View.java:17225)
                  at android.support.v7.widget.AppCompatImageView.setBackgroundResource(AppCompatImageView.java:86)
                  at com.example.prvaaplikacija.gametutorial.main.onCreate(main.java:125)
                  at android.app.Activity.performCreate(Activity.java:6303)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
                  at android.app.ActivityThread.access$900(ActivityThread.java:153)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5441)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

我在C:\ Users \ user.gradle中创建了一个gradle.properties文件,它看起来像这样:

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true

我的本​​地gradle.properties文件如下所示:

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

但当我用鼠标胡软时,它给了我一个通知 unused property

我已将此代码添加到我的build.gradle文件中,并尝试使用它的一些变体,但它仍然无效。

 dexOptions {
    preDexLibraries = false;
    incremental true 
    javaMaxHeapSize "4g"
}

而且:

multiDexEnabled true

我尝试通过手动删除来清除我的gradle缓存,并且我的所有操作都没有做任何更改。

如果有人可以帮我解决问题,我会非常感激。我被困在这几天了,我认为只有我自己才能做更多的事来解决这个问题。

1 个答案:

答案 0 :(得分:1)

您尝试修复内容会修复开发计算机上的OutOfMemoryError 。您的崩溃将在Android设备上发生,因为您的应用内存不足。

具体来说,您尝试加载的某些可绘制资源 - 作为ImageView的背景(?) - 将占用17013900字节的堆空间,并且您没有一个空闲的堆块空间那么大。

17013900字节相当于2062x2062像素图像。这太大了

所以:

  • 找出这是什么可绘制资源

  • 如果您将资源放在res/drawable/中,请选择一个更合适的目录(特定于密度的目录,如res/drawable-xhdpi/,或者res/drawable-nodpi/来表示Android不应该根据屏幕密度进行转换)

  • 如果图像的分辨率很大,请将其缩小