web-dev-qa-db-fra.com

java.lang.OutOfMemoryError: échec de l'allocation d'une allocation jusqu'au MOO

En fait, j'essaie de créer une application avec un nombre n de fichiers multimédias contenant des images et des vidéos. La taille de mes applications est d'environ 34MB et la taille de mes actifs est d'environ 60mb. Alors que je charge l'application dans des appareils normaux, nous ne rencontrons aucun problème, mais dans le cas d'appareils 2K resolutions tels que Nexus 6P, HTC, LG etc., les applications se bloquent au milieu du processus avec l'erreur "Mémoire insuffisante". J'ai produit le rapport d'erreur avec ceci. J'ai essayé de bitmap aussi. En même temps, j'utilise des vidéos dans la méthode des tableaux.

Quelqu'un peut-il aider avec ce problème?

EXCEPTION FATALE: Processus principal: com.example.we.appname, PID: 9353

Java.lang.OutOfMemoryError: Impossible d'allouer une allocation d'octets de 1660396 avec 1243880 octets libres et 1214 Ko jusqu'à ce que le MOO se trouve sur dalvik.system.VMRuntime.newNonMovableArray (méthode native) sur Android.graphics.BitmapFactory.nativeDecodeAsset (Méthode Native) BitmapFactory.decodeStream (BitmapFactory.Java:620) sur Android.graphics.BitmapFactory.decodeResourceStream (BitmapFactory.Java:455) sur Android.graphics.drawable.Drawable.createFromResourceStream (Drawable.Java:1155) sur Android.cont.rs. .loadDrawableForCookie (ResourcesImpl.Java:720) sur Android.content.res.ResourcesImpl.loadDrawable (ResourcesImpl.Java:571) sur Android.content.Resources.loadDrawable (Resources.Java:858) sur Android.content.res. TypedArray.getDrawable (TypedArray.Java:928) à Android.graphics.drawable.AnimationDrawable.inflateChildElements (AnimationDrawable.Java:327) à Android.graphics.drawable.AnimationDrawable.inflate (AnimationDrawable.Java:327) à Android.graphics.drawable .DrawableInflater.inflat eFromXml (DrawableInflater.Java:130) sur Android.graphics.drawable.Drawable.createFromXmlInner (Drawable.Java:1227) sur Android.graphics.drawable.createFromXml (Drawable.Java:1200) sur Android.content.res.ResourcesImpl .loadDrawableForCookie (ResourcesImpl.Java:715) sur Android.content.res.ResourcesImpl.loadDrawable (ResourcesImpl.Java:571) sur Android.content.Resources.getDrawable (Resources.Java:771) sur Android.content.Context. getDrawable (Context.Java:525) sur Android.view.View.setBackgroundResource (View.Java:18228) sur com.example.kq.meettheshps.Score_Card.onCreate (Score_Card.Java:58) sur Android.app.Activity.performCreate (Activity.Java:6679) à Android.app.Instrumentation.callActivityOnCreate (Instrumentation.Java:1118) à Android.app.ActivityThread.performLaunchActivity (ActivityThread.Java:2618) à Android.app.ActivityThread.perctLaunchActivity (ActivityThread.Java:2618) à Android.app.ActivityThread.handleLaunchAunch (ActivityThread.Java: 2726) sur Android.app.ActivityThread.-wrap12 (ActivityThread.Java) sur Android.app.ActivityThread $ H.handleMessage (ActivityT hread.Java:1477) sur Android.os.Handler.dispatchMessage (Gestionnaire.Java:102) sur Android.os.Looper.loop (Looper.Java:154) sur Android.app.ActivityThread.main (ActivityThread.Java:6119 ) à Java.lang.reflect.Method.invoke (Méthode native) à com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:886) à com.Android.internal.os.ZygoteInit.main (ZygoteInit .Java: 776)

2
Smart Safin

La solution simple que j’ai trouvée est, Ajouter hardwareAccelerated & largeHeap sous applicationAndroidManifest.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">
9

On dirait que vous cachez trop de fichiers dans RAM ou que vous instanciez les mêmes bitmaps et vidéos à plusieurs reprises jusqu'à épuisement de la mémoire.

Vous ne devez pas écrire votre propre code de chargement et de mise en cache d'image sur Android en 2016, sauf si vous avez des exigences inhabituelles. Utilisez l’une des bibliothèques qui ont résolu ce problème. Voir Picasso v/s Imageloader v/s Fresco vs Glide pour plus de conseils.

2
Rasmusob

C'est une erreur courante quand vous utilisez Bitmap, alors ajoutez cette ligne dans 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">

J'espère que ça vous sera utile.

1
Wajid khan

Cela se produit à cause d'une image de grande taille. Essayez avec une image de petite taille, c'est-à-dire la résolution de l'écran de votre téléphone.

J'ai eu le même problème. J'ai essayé de réduire la taille de l'image dans Paint avec 2100 x 1300 px et cela fonctionnait, mais l'application traînait beaucoup.

0
LEGEND MORTAL