实际上,我正在尝试创建一个包含n个多媒体文件的应用程序,其中包括图像和视频。我的应用大小约为34MB
,我的资源大小约为60mb
。当我在普通设备上加载应用时,我们没有遇到任何问题,但是2K resolutions
设备如Nexus 6P, HTC, LG
等等,应用程序在进程中途崩溃并出现错误&# 34; Out of Memory"。
我用这个产生了错误报告。我也尝试过bitmap factory。
同时我在数组方法中使用视频。
任何人都可以帮忙解决这个问题吗?
致命异常:主程序:com.example.we.appname,PID:9353
java.lang.OutOfMemoryError:无法在android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)的dalvik.system.VMRuntime.newNonMovableArray(Native Method)中分配带有1243880个空闲字节和1214KB的1660396字节分配位于android.content的android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)上的.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)位于android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)。位于android.content.res.Resources.loadDrawable(Resources.java:858)的android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)的res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)在Android的android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:297)的android.graphics.drawable.AnimationDrawable.inflateChildElements(AnimationDrawable.java:327)上的.res.TypedArray.getDrawable(TypedArray.java:928)。 graphics.drawable.DrawableInflater.inf在android.content.res.ResourcesImpl的android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227)的android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200)中的lateFromXml(DrawableInflater.java:130) .loadDrawableForCookie(ResourcesImpl.java:715)位于android.content.res.Resources上的android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)android.content.Context的android.content.res.Resources.getDrawable(Resources.java:771)。 android.app.Activity.performCreate在com.example.kq.meettheshps.Score_Card.onCreate(Score_Card.java:58)的android.view.View.setBackgroundResource(View.java:18228)上的getDrawable(Context.java:525) (Activity.java:6679)在Android.app.ActivityThread.perleLaunchActivity(ActivityThread.java:2618)的android.app.Instrumentation.callActivityCnate(Instrumentation.java:1118)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2726)android.app.ActivityThread.-wrap12(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(Activi) tyThread.java:1477)android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:154)android.app.ActivityThread.main(ActivityThread.java:6119) )at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)的com.android.internal.os.ZygoteInit.main(ZygoteInit)中的java.lang.reflect.Method.invoke(Native Method)的.java:776)
答案 0 :(得分:9)
我找到的简单解决方案是,
添加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">
答案 1 :(得分:2)
听起来你要么在RAM中缓存太多文件,要么一遍又一遍地实例化相同的位图和视频,直到内存不足为止。
除非您有不寻常的要求,否则您不应在2016年在Android上编写自己的图片加载和缓存代码。使用已解决此问题的库之一。有关更多指导,请参阅Picasso v/s Imageloader v/s Fresco vs Glide。
答案 2 :(得分:1)
处理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">
希望它会有所帮助。
答案 3 :(得分:0)
由于图像尺寸较大,这种情况正在发生。尝试使用小尺寸图像,即手机屏幕分辨率。
我遇到了同样的问题。尝试使用2100 x 1300像素减少Paint中的图像大小并且它工作但应用程序非常滞后。