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.
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.
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
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
Essayez d’utiliser la classe Bitmap.Factory, ce lien vous aidera Chargement efficace de bitmaps volumineuses
Dans mon cas, j'ai résolu le problème après avoir ajouté Android:hardwareAccelerated="false"
dans la applicationg
du fichier manifeste.
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.
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
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é.
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é.