我是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缓存,并且我的所有操作都没有做任何更改。
如果有人可以帮我解决问题,我会非常感激。我被困在这几天了,我认为只有我自己才能做更多的事来解决这个问题。
答案 0 :(得分:1)
您尝试修复内容会修复开发计算机上的OutOfMemoryError
。您的崩溃将在Android设备上发生,因为您的应用内存不足。
具体来说,您尝试加载的某些可绘制资源 - 作为ImageView
的背景(?) - 将占用17013900字节的堆空间,并且您没有一个空闲的堆块空间那么大。
17013900字节相当于2062x2062像素图像。这太大了。
所以:
找出这是什么可绘制资源
如果您将资源放在res/drawable/
中,请选择一个更合适的目录(特定于密度的目录,如res/drawable-xhdpi/
,或者res/drawable-nodpi/
来表示Android不应该根据屏幕密度进行转换)
如果图像的分辨率很大,请将其缩小