Quels sont les avantages de définir bigHeap à true?

J’ai une application avec près de 50 classes que je mets android:largeHeap="true" , comme on peut le voir ci-dessous. Est-ce une bonne pratique?

   

Veuillez suggérer les avantages et les inconvénients de son utilisation.

Je reçois des problèmes de mémoire, c’est pourquoi je pose cette question.

Bien trop tard pour la fête ici, mais je vais offrir mon 0.02 $ de toute façon.
Ce n’est pas une bonne idée d’utiliser android:largeHeap="true" voici l’extrait de Google qui l’explique,

Toutefois, la possibilité de demander un segment de mémoire volumineux est uniquement destinée à un petit ensemble d’applications pouvant justifier la nécessité de consumr plus de mémoire vive (une grande application de retouche photo, par exemple). Ne demandez jamais un gros tas simplement parce que vous n’avez plus de mémoire et que vous avez besoin d’une solution rapide. Vous devez l’utiliser uniquement lorsque vous savez exactement où votre mémoire est allouée et pourquoi elle doit être conservée. Cependant, même lorsque vous êtes certain que votre application peut justifier le gros tas, vous devez éviter de le demander dans la mesure du possible. L’utilisation de la mémoire supplémentaire se fera de plus en plus au désortingment de l’expérience utilisateur globale, car la récupération de la mémoire prendra plus de temps et les performances du système seront plus lentes lors du changement de tâche ou lors d’autres opérations courantes.

voici le lien complet de la documentation https://developer.android.com/training/articles/memory.html

METTRE À JOUR

Après avoir travaillé avec out of memory errors je dirais que l’append au manifeste pour éviter le problème n’est pas un péché, tout comme @Milad souligne qu’il n’affecte pas le fonctionnement normal de l’application

MISE À JOUR 2

Voici quelques conseils pour gérer out of memory errors

1) Utilisez ces rappels onLowMemory donne onLowMemory , onTrimMemory(int) et effacez le cache de l’image comme (picasso, glide, fresco ….) vous pouvez en lire plus ici et ici
2) compresser vos fichiers (images, pdf)
3) lire comment gérer les bitmap plus efficacement ici
4) Utilisez des peluches régulièrement avant que la production ne pousse pour vous assurer que le code est élégant et non volumineux

Je pense que c’est une question très efficace et permettez-moi d’append quelques détails sur les avantages et les inconvénients de l’utilisation de cette option.

Ce que vous obtenez :

  • De toute évidence, vous obtenez un OutOfMemoryError de OutOfMemoryError plus important, ce qui signifie une diminution du risque d’ OutOfMemoryError .

Ce que vous perdez:

  • Vous risquez de perdre des frameworks, ce qui peut provoquer un accrochage visible . Un tas plus important rend les collectes de déchets plus longues. Parce que le ramasse-miettes doit parcourir l’ensemble de vos objects en direct. Habituellement, le temps de pause de la récupération de la mémoire est d’environ 5 ms et vous pouvez penser que quelques millisecondes ne sont pas un problème. Mais chaque milliseconde compte. L’appareil Android doit mettre à jour son écran toutes les 16 ms et un temps GC plus long peut augmenter le temps de traitement de votre image sur la barrière de 16 millisecondes, ce qui peut entraîner un accrochage visible.

  • La commutation d’applications deviendra également plus lente . Le système Android peut tuer des processus dans le cache LRU en commençant par le processus le moins récemment utilisé, mais en prenant également en compte les processus nécessitant le plus de mémoire. Donc, si vous utilisez un segment de mémoire plus important, votre processus a plus de chances d’être tué lorsqu’il est en arrière-plan, ce qui signifie que les utilisateurs peuvent mettre plus de temps à passer d’une autre application à la votre. En outre, d’autres processus d’arrière-plan risquent d’être éliminés lorsque votre processus est en avant-plan, car votre application nécessite une mémoire plus importante. Cela signifie que le passage de votre application à d’autres applications prend également plus de temps.

Conclusion :

Évitez d’utiliser l’option largeHeap autant que possible. Cela peut vous coûter des pertes de performance difficiles à détecter et une mauvaise expérience utilisateur.

En fait Android: LargeHeap est l’instrument pour augmenter la mémoire allouée à l’application.

Il n’y a pas de définition claire de la nécessité d’utiliser ce drapeau. Si vous avez besoin de plus de mémoire – Android vous fournit un outil pour l’augmenter. Mais la nécessité d’utiliser, vous vous définissez.

J’ai une application avec près de 50 classes

Je ne pense pas que cela pose beaucoup de problèmes. La raison pour laquelle vous avez une erreur outOfMemory est généralement de charger de nombreuses images dans l’application ou quelque chose du genre. Si vous n’êtes pas satisfait d’utiliser de gros segments de mémoire, vous devez trouver un moyen d’optimiser l’utilisation de la mémoire.

Vous pouvez également utiliser les bibliothèques de chargement d’images telles que Picasso , UIL ou Glide . Tous ont la particularité de mettre en cache l’image en mémoire et / ou sur disque.

Si les processus de votre application doivent être créés avec un grand tas Dalvik. Cela s’applique à tous les processus créés pour l’application. Il ne s’applique qu’à la première application chargée dans un processus; Si vous utilisez un ID utilisateur partagé pour permettre à plusieurs applications d’utiliser un processus, elles doivent toutes utiliser cette option de manière cohérente ou avoir des résultats imprévisibles.

La plupart des applications ne devraient pas en avoir besoin et devraient plutôt se concentrer sur la réduction de leur utilisation globale de la mémoire pour améliorer les performances. Activer cela ne garantit pas non plus une augmentation fixe de la mémoire disponible, car certains périphériques sont limités par leur mémoire totale disponible.

oui c’est une bonne pratique de mettre android:largeHeap="true" car Android vous donne un outil pour augmenter votre mémoire allouée si nécessaire.

Vous pouvez obtenir plus d’idées à partir de ce lien: https://developer.android.com/topic/performance/memory