java.lang.OutOfMemoryError:无法分配分配,直到 OOM
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/41184166/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.lang.OutOfMemoryError: Failed to allocate a allocation until OOM
提问by NatheemYousf
Actually, I am trying to create a app with n number of multimedia files which includes images and videos. My apps size is around 34MB
, and my assets size is around 60mb
. While I am loading the app in normal devices we are not facing any problem, But the devices having 2K resolutions
such as Nexus 6P, HTC, LG
etc., the apps get crash in the middle of the process with the error "Out Of Memory".
I have produced the error report with this. I have tried to bitmap factory also.
At the same time I am using videos in array method.
实际上,我正在尝试创建一个包含 n 个多媒体文件的应用程序,其中包括图像和视频。我的应用程序大小约为34MB
,资产大小约为60mb
. 当我在普通设备上加载应用程序时,我们没有遇到任何问题,但是具有2K resolutions
诸如Nexus 6P, HTC, LG
等的设备,应用程序在过程中崩溃并出现“内存不足”错误。我已经用这个生成了错误报告。我也尝试过位图工厂。同时我在数组方法中使用视频。
Can anyone help with this issue?
任何人都可以帮助解决这个问题吗?
FATAL EXCEPTION: main Process: com.example.we.appname, PID: 9353
java.lang.OutOfMemoryError: Failed to allocate a 1660396 byte allocation with 1243880 free bytes and 1214KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) at android.content.res.Resources.loadDrawable(Resources.java:858) at android.content.res.TypedArray.getDrawable(TypedArray.java:928) at android.graphics.drawable.AnimationDrawable.inflateChildElements(AnimationDrawable.java:327) at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:297) at android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130) at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) at android.content.res.Resources.getDrawable(Resources.java:771) at android.content.Context.getDrawable(Context.java:525) at android.view.View.setBackgroundResource(View.java:18228) at com.example.kq.meettheshps.Score_Card.onCreate(Score_Card.java:58) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
致命异常:主进程:com.example.we.appname,PID:9353
java.lang.OutOfMemoryError:在 dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics. BitmapFactory.decodeStream(BitmapFactory.java:620) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) at android.content.res.ResourcesImpl .loadDrawableForCookie(ResourcesImpl.java:720) 在 android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) 在 android.content.res.Resources.loadDrawable(Resources.java:858) 在 android.content.res。 TypedArray.getDrawable(TypedArray.java:928) 在 android.graphics.drawable.AnimationDrawable.inflateChildElements(AnimationDrawable.java:327) 在 android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:297) 在 android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130) 在 android.graphics.drawable.Drawable.createFromXmlInner(Drawable) :1227) 在 android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200) 在 android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715) 在 android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl. java:571) 在 android.content.res.Resources.getDrawable(Resources.java:771) 在 android.content.Context.getDrawable(Context.java:525) 在 android.view.View.setBackgroundResource(View.java:18228) ) 在 com.example.kq.meettheshps.Score_Card.onCreate(Score_Card.java:58) 在 android.app.Activity.performCreate(Activity.java:6679) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android .app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app。 ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:776)-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper. java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper. java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)internal.os.ZygoteInit.main(ZygoteInit.java:776)internal.os.ZygoteInit.main(ZygoteInit.java:776)
采纳答案by Narendra Sorathiya
Simple Solution which I found is,
Add hardwareAccelerated
& largeHeap
under application
AndroidManifest.xml
我发现的简单解决方案是,添加hardwareAccelerated
&largeHeap
下application
AndroidManifest.xml
<application
android:allowBackup="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
回答by Rasmusob
It sounds like you are either caching too many files in RAM or instantiating the same bitmaps and videos over and over until you run out of memory.
听起来您要么在 RAM 中缓存了太多文件,要么一遍又一遍地实例化相同的位图和视频,直到内存不足。
You should not write your own image loading and caching code on Android in 2016 unless you have unusual requirements. Use one of the libraries that have solved this problem. See Picasso v/s Imageloader v/s Fresco vs Glidefor more guidance.
除非您有异常需求,否则您不应在 2016 年在 Android 上编写自己的图像加载和缓存代码。使用已解决此问题的库之一。有关更多指导,请参阅Picasso v/s Imageloader v/s Fresco 与 Glide。
回答by LEGEND MORTAL
This is happening because of large size image. Try with small size image i.e. of your phone screen resolution.
这是由于大尺寸图像而发生的。尝试使用小尺寸图像,即您的手机屏幕分辨率。
I had the same problem. Tried reducing the image size in Paint with 2100 x 1300 px and it worked but the app was lagging very much.
我有同样的问题。尝试使用 2100 x 1300 像素减小 Paint 中的图像大小并且它工作但应用程序非常滞后。
回答by Wajid khan
It's a common error when you dealing with Bitmap
so add this line in AndroidManifest.xml
:
android:largeHeap="true"
这是您处理时的常见错误,Bitmap
因此在中添加以下行AndroidManifest.xml
:
android:largeHeap="true"
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:largeHeap="true"
android:hardwareAccelerated="false"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
Hope it will be helpful.
希望它会有所帮助。