web-dev-qa-db-fra.com

"Toile: essaye de dessiner un bitmap trop volumineux" lorsque la taille d'affichage d'Android N est supérieure à Small

J'ai une application publiée qui se bloque au démarrage sur Android N lorsque le nouveau paramètre Display size OS est défini sur une valeur trop grande.

Quand je regarde dans logcat, je vois le message suivant:

Java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.

J'ai lié le problème à un ImageView dans ma première activité qui montre une grande image d'arrière-plan Nice. L'image en question est 2048x1066 et se trouve dans mon répertoire générique drawables; quelle que soit la densité, cette image sera utilisée.

Tout fonctionne correctement lorsque le paramètre Display size est Small. Mais quand je monte à Default, ça cesse de fonctionner. Si j'échange ensuite l'image avec une image plus petite, cela fonctionne à Default, mais si je monte à Large, il ne fonctionne plus.

Mon hypothèse est que, si vous ajustez Display size up, votre appareil se comportera comme un appareil physiquement plus petit avec une densité de pixels plus élevée. Mais je ne comprends pas ce que je suis censé faire ici. Si j'insère des images de plus en plus petites pour des résolutions de plus en plus élevées, cela ne paraîtra pas bien sur les grands écrans. Ou est-ce que je ne comprends pas quelque chose?

Tous les indicateurs seraient grandement appréciés.

47
Brian Rak

Dans mon cas, déplacer la bitmap de splash (haute résolution) de drawable à drawable-xxhdpi était la solution.

J'ai eu le même problème. Je ne soupçonnais pas que mon écran de démarrage était le problème, car est affiché au démarrage de l'application, mais il s'est avéré que l'écran de démarrage est le problème.

L'écran de démarrage dans mon cas a une résolution de xxhdpi et a été placé par erreur dans le dossier drawable au lieu de drawable-xxhdpi. Ainsi, Android supposait que l'écran de démarrage avait une résolution mdpi et redimensionnait l'image à 3 * 3 fois sa taille requise et en essayant de créer un bitmap.

105
Johan Franzén

Déplacez votre image dans le dessin vers mipmap-xxhdpi.Votre image est au format bitmap, vous devriez donc placer votre image dans le dossier mipmap, cela fonctionnera

9
kalsara Magamage

Je ne sais pas si cela aiderait quelqu'un, mais je vais le laisser ici . Dans mon cas, le problème ne concernait que les appareils Sumsung dotés d'Android 7, et le problème était au format de l'écran de démarrage. après avoir changé la hauteur à 1024 px - tout fonctionne bien 

9
kazimad

Essayez d’utiliser la classe Bitmap.Factory, ce lien vous aidera Chargement efficace de bitmaps volumineuses

3
Khalid Ali

Dans mon cas, j'ai résolu le problème après avoir ajouté Android:hardwareAccelerated="false" dans la applicationg du fichier manifeste.

1
CHAMCHOUN

Dans mon cas, je viens de changer le canevas d'image utilisé en arrière-plan à l'aide de Paint3d (ou vous pouvez en utiliser un autre). Ici, je partage une capture d'écran, parcourez-la simplement.

0
Vishaljoshi007

si vous utilisez Picasso, passez à Glide comme ceci.

Enlever picasso

Picasso.get().load(Uri.parse("url")).into(imageView)

Changer de glisse

Glide.with(context).load("url").into(imageView)

Plus efficace

0
Deniz

Les fichiers d'icônes sont trop volumineux pour qu'Android puisse se charger efficacement et en douceur. Android reconnaît cela avec ses algorithmes intelligents.

Vous pouvez redimensionner les fichiers d'icône à l'aide de Final Android Resizer by asystat. Redimensionnez-les à "xhdpi" ou moins.

Placez les photos redimensionnées en format dessinable ou écrasez-les par-dessus les gros fichiers d'icônes existants.

Ensuite, vous avez terminé.

0
lloydyu24

si vous utilisez Glide et que vous chargez 1k images à la fois ou quelques images, il est alors question de Glide ou de ce que vous faites pour définir la vue. vous pouvez le résoudre simplement en appliquant le type d'échelle dans le plané.

0
Deepak Rajput