Tamaño de almacenamiento dynamic de Android en diferentes teléfonos / dispositivos y versiones de sistema operativo

¿Alguien sabe si el tamaño del montón en los teléfonos Android es un valor constante de acuerdo con lo establecido en la versión del sistema operativo o si este es un ajuste que los productores de teléfonos pueden decidir?

¿El tamaño del almacenamiento dynamic es proporcional a la cantidad de RAM en el teléfono?

Solo he encontrado artículos donde las personas dicen que el tamaño de almacenamiento dynamic de una aplicación es de 16 millones. Sin embargo, estos artículos son un poco viejos. Por lo que veo, como ejemplo, los tamaños de almacenamiento dynamic varían desde alrededor de 20M hasta 24M en un modelo específico. Este teléfono tiene 768M de RAM.

¿Alguien sabe si el tamaño del montón en los teléfonos Android es un valor constante de acuerdo con lo establecido en la versión del sistema operativo o si este es un ajuste que los productores de teléfonos pueden decidir?

Técnicamente, es un ajuste que los productores de teléfonos pueden decidir. Android es de código abierto. No recuerdo el documento de definición de compatibilidad que detalla los requisitos del tamaño del montón, aunque no lo hice recientemente.

¿El tamaño del almacenamiento dynamic es proporcional a la cantidad de RAM en el teléfono?

No, tiende a basarse más en la resolución de la pantalla, ya que las pantallas de mayor resolución tienden a manipular mapas de bits más grandes, por lo que Google hace recomendaciones de tamaño de stack que, con suerte, los fabricantes de dispositivos cumplirán.

Solo he encontrado artículos donde las personas dicen que el tamaño de almacenamiento dynamic de una aplicación es de 16 millones.

Al buscar StackOverflow en [android] "heap size" aparece esta respuesta .

Más información del dispositivo extraída de los archivos build.prop (adb -d pull /system/build.prop):

Teléfonos (versión de Android):

  • HTC Wildfire (2.2.1) = 16 MB
  • HTC Wildfire S (2.3.5) = 20 MB
  • HTC Salsa (2.3.3) = 20 MB
  • HTC Desire (2.3.3) = 32 MB
  • HTC Desire S (2.3.5) = 32MB
  • Sprd – Richview – S111 (2.3.5) = 32MB
  • Samsung Galaxy S GT-I9000 (2.2) = 48MB
  • Samsung Galaxy R GT-I9103 (2.3.5) = 64MB
  • Samsung Galaxy Y GT-S5360 (2.3.5) = 64MB
  • Samsung Galaxy Note N7000 (4.1.2) = heapstartsize = 8m, heapgrowthlimit = 64m, heapsize = 256m
  • Samsung Galaxy S3 GT-I9300 (4.3, xhpdi) = 8/64 / 256MB
  • Samsung Galaxy S4 GT-I9505 (4.4, xxhpdi) = 8/128 / 512MB
  • Google Galaxy Nexus (4.3) = 8/96 / 256MB
  • Google Nexus 4 (4.4, xhdpi) = 8/192 / 512MB
  • Google Nexus 5 (4.4, xxhdpi) = 8/192 / 512MB
  • Samsung Galaxy S6 SM-G920W8 (7.0) = 8/256 / 512MB

Tabletas (versión de Android):

  • Samsung Galaxy Tab GT-P1000 (2.2) = 48MB
  • Samsung Galaxy Tab 8.9 GT-P7300 (3.2) = 5/64 / 288MB
  • Samsung Galaxy Tab 10.1 GT-P7500 (3.2) = 5/64 / 288MB
  • Samsung Galaxy Tab 3 10.1 GT-P5200 (4.2, mdpi) = 8/96 / 256MB
  • Acer Iconia A500 (3.2.1) = 5/48 / 256MB
  • Kindle Fire HD 7 “(4.0.3) = 5/48 / 256MB
  • Asus Transformer Prime TF201 (4.1.1) = 5/48 / 256MB
  • Nexus 10 (4.4.3) 16/192/512 MB

No solo los fabricantes de teléfonos, sino cualquier persona que cree una versión del sistema operativo Android, pueden especificar el tamaño de almacenamiento dynamic máximo permitido, según los requisitos específicos de sus dispositivos. Algunas raíces de Android, como CyanogenMod, incluso permiten que el usuario seleccione el tamaño del montón como configuración.

Puede detectar el tamaño máximo de almacenamiento dynamic permitido utilizando el método

 Runtime.getRuntime().maxMemory(); 

Información adicional sobre este tema está disponible aquí .

Si su aplicación normalmente necesita más de 16 MB de almacenamiento dynamic, un enfoque sugerido sería establecer un nivel mínimo de versión del sistema operativo en su manifiesto que garantice que la abrumadora mayoría de quienes descarguen su aplicación tenga al menos la cantidad que necesita y luego encuentre una forma de degradar su funcionalidad con elegancia de una manera que reduzca sus requisitos de almacenamiento dynamic según sea necesario, hasta un nivel base de 16 MB, para la pequeña cantidad de usuarios con una cantidad inferior a su cantidad óptima de almacenamiento que caiga por ese tamiz.

Aquí hay algunas figuras que muestran la asociación de la RAM del teléfono con la versión del sistema operativo (basada en SO actual, no original). Creo que un teléfono que tenga al menos 1 GB de RAM casi siempre tendrá más de 16 MB de almacenamiento dynamic. Tenga en cuenta que los porcentajes aquí son para la cantidad de modelos de teléfono que admiten la memoria indicada, no para el total de teléfonos en uso, lo que puede ser bastante sesgado hacia ciertos modelos. Estos números se obtuvieron al enchufar las entradas en el siguiente buscador de teléfono (que incluye 1500 modelos de teléfonos Android) y, por lo tanto, son solo figuras del estadio: http://www.gsmarena.com/search.php3

Porcentaje de modelos de teléfono que tienen al menos 1 GB de RAM, según la versión actual del sistema operativo (no versión en el lanzamiento):

 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 

Debería poder verificar el máximo vm heapsize usando:

 getprop dalvik.vm.heapsize 

en la terminal de Android (connectbot o adb shell, etc.). Es posible volver a montar la lectura-escritura y establecer el tamaño del almacenamiento dynamic en el archivo build.prop también. (Asegúrese de tener instalada la recuperación para que pueda volver a configurarla si accidentalmente la hace demasiado pequeña, no se iniciará).

El “Presupuesto de VM” que una aplicación puede usar varía de un dispositivo a otro. Las tabletas generalmente permiten un presupuesto mayor que los teléfonos.

Estos son algunos tamaños de presupuesto de VM que he encontrado para varios dispositivos.

  • G1 = 16 Mb
  • Droid = 24 Mb
  • Nexus One = 32 Mb
  • Xoom = 48 Mb
  • GalaxyTab = 64 Mb.

(Nota: si has encontrado algo diferente, házmelo saber)

En realidad, existe una memoria de aplicación mínima definida que depende del tamaño y la densidad de la pantalla:

Los dispositivos móviles generalmente tienen recursos del sistema restringidos. Los dispositivos Android pueden tener tan solo 16 MB de memoria disponible para una sola aplicación. El documento de definición de compatibilidad de Android (CDD), sección 3.7. La compatibilidad de la máquina virtual proporciona la memoria de aplicación mínima requerida para varios tamaños de pantalla y densidades. Las aplicaciones deben optimizarse para funcionar bajo este límite mínimo de memoria. Sin embargo, tenga en cuenta que muchos dispositivos están configurados con límites más altos.

Citado de: http://developer.android.com/training/displaying-bitmaps/index.html

Pero como otros han declarado, cada fabricante de dispositivos decide el valor real para el dispositivo, por lo que podría ser mayor que esto (pero no más pequeño).

El documento de definición de compatibilidad (CDD) mencionado enumera los requisitos mínimos para cada versión de Android: https://source.android.com/compatibility/cdd.html

Para la última versión de Android, hay una versión disponible de html, y podemos enlazar directamente a la sección de memoria de tiempo de ejecución allí: https://source.android.com/compatibility/android-cdd.html#3_7_runtime_compatibility

Para Android 2.3:

Las implementaciones de dispositivos con pantallas clasificadas como de densidad media o baja DEBEN configurar Dalvik para asignar al menos 16 MB de memoria a cada aplicación. Las implementaciones de dispositivos con pantallas clasificadas como de alta densidad o densidad extra alta DEBEN configurar Dalvik para asignar al menos 24 MB de memoria a cada aplicación. Tenga en cuenta que las implementaciones de dispositivo PUEDEN asignar más memoria que estas cifras.

Para las versiones modernas, hay una tabla donde depende de la densidad de la pantalla, etc.

Para Android 4.2, fila de ejemplo de esa tabla:

tamaño pequeño / normal / grande y densidad xhdpi: 64 MB

Para Android 6, extrae:

xhdpi pequeño / normal: 80 MB

pequeño / normal xxhdpi: 128 MB

pequeño / normal xxxhdpi: 256 MB

También hay una tabla para las otras versiones de Android 2.x, 4.x, 5.x y 6 en esos documentos (ver el enlace de CDD más arriba).

Consulte este enlace de Google para encontrar fácilmente densidades de pantalla, etc. para dispositivos específicos: https://design.google.com/devices/

Esta información está funcionando para mí. Seleccione Emulator Tablet Android TV RAM 1536MB VM HEAP 16MB Internal Storage 800MB Studio -managed 100