Si vous devez utiliser (et conserver) une grande quantité de mémoire, alors oui, vous pouvez et devez utiliserandroid:largeHeap="true"
. Mais si vous l'utilisez, vous devez être prêt à vider votre application de la mémoire chaque fois que d'autres applications sont au premier plan.
Par «soyez prêt», je veux dire que vous devez concevoir pour cette probabilité, de sorte que vos méthodes onStop()
et onResume()
soient écrites aussi efficacement que possible, tout en garantissant que tout état pertinent est enregistré et restauré d'une manière qui présente une apparence transparente à l'utilisateur.
Il existe trois méthodes qui se rapportent à ce paramètre: maxMemory()
, getMemoryClass()
etgetLargeMemoryClass()
.
Pour la plupart des appareils, maxMemory()
représentera une valeur similaire àgetMemoryClass()
par défaut, bien que la dernière soit exprimée en mégaoctets, tandis que la première est exprimée en octets.
Lorsque vous utilisez le largeHeap
paramètre, maxMemory()
sera augmenté à un niveau supérieur spécifique à l'appareil, tandis quegetMemoryClass()
restera le même.
getMemoryClass()
ne limite pas votre taille tas, mais il vous indique la quantité de vous tas devriez utiliser si vous voulez que votre application à la fonction confortablement et compatiblement dans les limites du dispositif particulier sur lequel vous utilisez.
maxMemory()
, En revanche, ne contraignez votre taille du tas, et ainsi vous accès à un gain tas supplémentaire en augmentant sa valeur, et largeHeap
fait augmenter cette valeur. Cependant, l'augmentation de la quantité de tas est toujours limitée et cette limite sera spécifique à l'appareil, ce qui signifie que la quantité de tas disponible pour votre application variera en fonction des ressources de l'appareil sur lequel votre application s'exécute. Ainsi, l'utilisation largeHeap
n'est pas une invitation pour votre application à abandonner toute prudence et à se frayer un chemin à travers le buffet à volonté.
Votre application peut découvrir exactement la quantité de mémoire rendue disponible sur un appareil particulier en utilisant le largeHeap
paramètre en appelant la méthode getLargeMemoryClass()
. La valeur renvoyée est en mégaoctets.
Cet article précédent comprend une discussion sur la largeHeap
paramètre, ainsi qu'un certain nombre d'exemples des quantités de tas disponibles avec et sans son utilisation, sur plusieurs appareils Android spécifiques:
Détecter la taille du tas d'application dans Android
Je n'ai déployé aucune de mes propres applications avec ce paramètre défini sur true. Cependant, j'ai du code gourmand en mémoire dans l'une de mes applications pour compiler un ensemble de paramètres liés à l'optimisation, qui ne s'exécute que pendant le développement. J'ajoute le largeHeap
paramètre uniquement pendant le développement, afin d'éviter les erreurs de manque de mémoire lors de l'exécution de ce code. Mais je supprime le paramètre (et le code) avant de déployer l'application.