Est-ce que quelqu'un sait si la taille du tas sur les téléphones Android est une valeur constante en fonction de ce qui est défini dans la version du système d'exploitation ou s'il s'agit d'un paramètre que les producteurs de téléphones peuvent choisir?
La taille du segment de mémoire est-elle proportionnelle à la quantité de RAM sur le téléphone?
Je n'ai trouvé que des articles dans lesquels les gens disent que la taille de tas d'une application est de 16 Mo. Cependant, ces articles sont un peu vieux. D'après ce que je vois, par exemple, la taille des segments de mémoire varie entre 20 et 24 millions d'un modèle spécifique. Ce téléphone a 768M de RAM.
Est-ce que quelqu'un sait si la taille du tas sur les téléphones Android est une valeur constante en fonction de ce qui est défini dans la version du système d'exploitation ou s'il s'agit d'un paramètre que les producteurs de téléphones peuvent choisir?
Techniquement, c'est un paramètre que les producteurs de téléphones peuvent choisir. Android est open source. Je ne me souviens pas du document de définition de la compatibilité énonçant les exigences de taille de segment de mémoire, bien que je n’aie pas consulté récemment.
La taille du segment de mémoire est-elle proportionnelle à la quantité de RAM sur le téléphone?
Non, il a tendance à s'appuyer davantage sur la résolution de l'écran, car les écrans à haute résolution ont tendance à vouloir manipuler des images bitmap plus volumineuses. Google recommande donc de réduire la taille des segments de mémoire que les fabricants de périphériques respecteront.
Je n'ai trouvé que des articles dans lesquels les gens disent que la taille de tas d'une application est de 16 Mo.
Rechercher StackOverflow sur [Android] "heap size"
fait apparaître cette réponse .
Quelques informations supplémentaires sur le périphérique extraites des fichiers build.prop (adb -d pull /system/build.prop):
Téléphones (version Android):
Tablettes (version Android):
Non seulement les fabricants de téléphones, mais toute personne qui crée une version du système d'exploitation Android, peut spécifier la taille de segment de mémoire maximale autorisée, en fonction des besoins spécifiques de leurs appareils. Certaines racines Android, telles que CyanogenMod, permettent même à l'utilisateur de sélectionner la taille du segment elle-même en tant que paramètre.
Vous pouvez détecter la taille de tas maximale autorisée à l'aide de la méthode
Runtime.getRuntime().maxMemory();
Des informations supplémentaires sur ce sujet sont disponibles ici .
Si votre application nécessite normalement plus de 16 Mo de mémoire, une approche suggérée consisterait à définir dans votre manifeste un niveau de version minimale du système d'exploitation garantissant que l'écrasante majorité de ceux qui téléchargent votre application disposent au minimum de la quantité dont vous avez besoin. un moyen de dégrader vos fonctionnalités de manière élégante, de manière à réduire les besoins en mémoire de forme en fonction des besoins, jusqu'à un niveau de base de 16 Mo, pour le petit nombre d'utilisateurs disposant de moins de la quantité optimale de mémoire qui passe à travers ce crible.
Voici quelques figures montrant l'association du téléphone RAM avec la version du système d'exploitation (basée sur le système d'exploitation actuel et non d'origine). Je pense qu'un téléphone disposant d'au moins 1 Go de RAM aura presque toujours plus de 16 Mo de mémoire. Notez que les pourcentages indiqués ici correspondent au nombre de téléphones modèles prenant en charge la mémoire indiquée, et non au nombre total de téléphones utilisés, ce qui peut être assez biaisé par rapport à certains modèles. Ces chiffres ont été obtenus en branchant les entrées dans le Finder de téléphone suivant (qui inclut 1500 modèles de téléphones Android). Il ne s'agit donc que de chiffres approximatifs: http://www.gsmarena.com/search.php3
Pourcentage de téléphones modèles disposant d'au moins 1 Go de RAM, par version actuelle du système d'exploitation (et non par la version au lancement):
Phones running Percent of models having at least 1GB of RAM Percentage of all models
4.4 and up 100 percent 1.5
4.3 and up 100 percent 2.9
4.2.x and up 74 percent 18.7
4.1.x and up 71 percent 37
4.0 and up 62 percent 60
2.3.x and up 57 percent 71
2.2 and up 44 percent 93
2.1 and up 44 percent 97
ALL OS VERSIONS: 41.5 percent 100
Vous devriez pouvoir vérifier la taille maximale de VM par:
getprop dalvik.vm.heapsize
au terminal Android (connectbot ou adb Shell, etc.). Il est possible de remonter en lecture-écriture et de définir la taille de segment de mémoire dans le fichier build.prop. (Assurez-vous que la récupération est installée afin de pouvoir la réinitialiser si vous la rendez trop petite par inadvertance, elle ne démarrera pas).
Le "budget VM" qu'une application est autorisée à utiliser varie d'un périphérique à l'autre. Les tablettes permettent généralement un budget plus important que les téléphones.
Voici quelques VM tailles de budget que j'ai trouvées pour différents appareils.
(Remarque: si vous avez trouvé différemment, faites le moi savoir)
Il existe en fait une mémoire d'application minimale définie qui dépend de la taille et de la densité de l'écran:
Les appareils mobiles ont généralement des ressources système limitées. Android Les appareils ne peuvent disposer que de 16 Mo de mémoire pour un seul application. Document de définition de la compatibilité Android (CDD), Section 3.7. Compatibilité machine virtuelle donne le minimum requis mémoire d'application pour différentes tailles et densités d'écran . Les applications doivent être optimisées pour fonctionner avec cette mémoire minimale limite. Cependant, gardez à l'esprit que de nombreux périphériques sont configurés avec une valeur plus élevée limites.
Cité de: http://developer.Android.com/training/displaying-bitmaps/index.html
Mais comme d’autres l’ont dit, chaque fabricant d’appareil décide de la valeur réelle de l’appareil. Elle peut donc être supérieure à celle-ci (mais pas inférieure).
Le document de définition de compatibilité (CDD) mentionné énumérant la configuration minimale requise pour chaque version d'Android: https://source.Android.com/compatibility/cdd.html
Pour la dernière version d'Android, une version html est disponible, et nous pouvons créer un lien direct vers la section de mémoire d'exécution à cet endroit: https://source.Android.com/compatibility/Android-cdd.html#3_7_runtime_compatibility
Pour Android 2.3:
Implémentations de l'appareil avec des écrans classés comme moyen- ou basse densité DOIT configurer Dalvik pour allouer au moins 16 Mo de mémoire à chaque application. Implémentations de périphérique avec des écrans classés comme haute densité ou très haute densité DOIT configurer Dalvik pour allouer au moins 24 Mo de mémoire pour chaque application. Notez cet appareil les implémentations PEUVENT allouer plus de mémoire que ces chiffres.
Pour les versions modernes, il existe plutôt un tableau où cela dépend de la densité de l'écran, etc.:
Pour Android 4.2, exemple de ligne de cette table:
taille petite/normale/grande et densité xhdpi: 64 Mo
Pour Android 6, extrayez:
xhdpi petit/normal: 80 Mo
xxhdpi petit/normal: 128 Mo
xxxhdpi petit/normal: 256 Mo
Il existe également un tableau pour les autres versions d'Android 2.x, 4.x, 5.x et 6 dans ces documents (voir le lien CDD ci-dessus).
Reportez-vous à ce lien Google pour trouver facilement des densités d'écran, etc., pour des appareils spécifiques: https://design.google.com/devices/
Ces données fonctionnent pour moi . Sélectionnez Emulator Tablet TV Android RAM 1536 Mo VM HEAP 16 Mo Stockage interne 800 MoStudio géré 100