Pregunta Aceleración de hardware de Android: ¿usar o no usar?


Estoy desarrollando una aplicación que funciona muy similar a la aplicación nativa de Facebook Android: red social que la mayoría de las veces el usuario gastará en un sinfín ListView mostrando muchas imágenes, ingresando a una galería de imágenes, etc.

digamos para la discusión que estoy haciendo todo lo correcto y las mejores prácticas de Android para lograr un desplazamiento uniforme (reciclando vistas como debería, usando diferentes tipos de vista cuando sea necesario, cargando en la memoria solo mapas de bits escalados en el tamaño necesario, mapas de bits de almacenamiento en caché, utilizando el patrón de diseño de ViewHolder, no bloqueando el hilo de la UI cuando sea posible, etc.)

digamos también que todo lo demás en mi aplicación está escrito de la mejor manera y siguiendo las mejores prácticas (para la discusión ...: ->)

mi aplicación no funciona mal en esa etapa, pero cuando encender la aceleración de hardware, como se describe y prometió en Documentación para desarrolladores de Android  haciendo mi aplicación mucho más suave y rápida. 

digamos que no afecta de manera negativa en la UI como puede suceder, y no estoy realizando ninguna de las Operaciones no admitidas

de acuerdo con el documento de Google sobre el tema, la única razón por la que puedo ver para no usar esta característica (además de todas las otras razones que ya he mencionado anteriormente) es que puede hacer que mi aplicación use más memoria RAM. pero ¿cuánta RAM? ¿mucho más? Sé que cuando mi aplicación consume mucha RAM, se convierte en un buen candidato para ser destruida por el sistema operativo cuando necesita liberar algo de memoria.

mi pregunta es básicamente -

  • ¿Está "bien" bajo mis circunstancias usar esta característica?
  • ¿Qué otros problemas pueden surgir al usarlo?

TIA


32
2018-05-08 04:18


origen


Respuestas:


Usar o no usar

Se recomienda utilizar la aceleración de hardware solo si tiene cálculos personalizados complejos para escalar, rotar y traducir imágenes, pero no lo use para dibujar líneas o curvas (y otras operaciones triviales) (fuente)

Si planeas tener transiciones comunes y también considerando que ya has considerado la escala, el reciclaje, el almacenamiento en caché, etc., entonces no tiene sentido cargar más con tu proyecto. Además, cualquier esfuerzo dedicado a volver a trabajar su código para permitir la aceleración de hardware no afectará a los usuarios en versiones inferiores a 3.0, que son ~ 36% del mercado a partir del 8 de mayo de 2013.

Memoria

En cuanto al uso de la memoria (según Este artículo), al incluir Android Hardware, la aplicación carga los controladores OpenGL para cada proceso, toma el uso de memoria de aproximadamente 2MB y lo aumenta a 8MB.

Otros asuntos

Además de las versiones API, supongo que también afectará la duración de la batería. Lamentablemente, no hay puntos de referencia en diferentes casos de uso en línea para trazar una línea en este caso. Algunos argumentan que en casos determinados debido a múltiples núcleos de GPU, el uso de la aceleración puede ahorrar batería. En general, creo que sería seguro que el efecto no sea demasiado dramático (o Google habría hecho de esto un punto importante).


33
2018-05-08 05:01



ACTUALIZAR

La aceleración de hardware está habilitada de forma predeterminada si su nivel de API de destino   es> = 14


Yo diría que sí en su situación, use la aceleración de hardware.

Al ver que no está utilizando ningún control de recursos intensivos en su aplicación, no debería ser un problema para habilitar la aceleración de Hardware. Como dijiste, tu aplicación funciona bastante bien sin aceleración de hardware.

Cuando habilita la aceleración de hardware, Android comenzará a usar su GPU y debido a los mayores recursos necesarios para habilitar la aceleración de hardware, su aplicación consumirá más RAM.


Una pregunta frecuente es ¿Aumentará la cantidad de ram en una cantidad realmente grande?

La respuesta a eso estará determinada por:

1. Su capacidad de programación es decir. gestión de la lista de reciclaje, escalado de las imágenes ect.

2. El dispositivo

Hace un tiempo, escribí una aplicación que se utilizaba para editar mapas de bits de alta resolución. Tuve el mismo problema. Encontré que en diferentes dispositivos el cantidad máxima de RAM asignada por el sistema operativo cuando la aceleración de hardware está habilitada varía según el dispositivo. Si su dispositivo tiene más memoria RAM, el sistema operativo asignará más memoria RAM a su aplicación, por lo que nunca encontrará una cantidad constante de memoria RAM utilizada para su aplicación. Los dispositivos más grandes y más caros siempre ejecutarán su aplicación en una cantidad mayor de memoria RAM.


¿Qué otros problemas pueden surgir al usar aceleración de hardware?

La aceleración de hardware puede causar problemas para algunas operaciones de dibujo en 2D. Si experimentas esto, puedes habilitar la aceleración de hardware solo para actividades específicas en tu aplicación como se indica en Publicación de aceleración de hardware en los Documentos para desarrolladores de Android

La forma más sencilla de habilitar la aceleración de hardware es activarla globalmente para toda su aplicación. Si su aplicación solo usa vistas estándar y Drawables, encenderla globalmente no debería causar ningún efecto de dibujo adverso. Sin embargo, dado que la aceleración de hardware no es compatible con todas las operaciones de dibujo en 2D, encenderla podría afectar algunas de sus aplicaciones que usan vistas personalizadas o llamadas de dibujo. Los problemas generalmente se manifiestan como elementos invisibles, excepciones o píxeles renderizados incorrectamente. Para remediar esto, Android le da la opción de habilitar o deshabilitar la aceleración de hardware en los siguientes niveles:    Solicitud,   Actividad,   Ventana,   Ver

De esta manera, también puede limitar la aceleración de hardware en su aplicación, pero por el sonido de la misma la necesitará para la mayoría de las funciones de su aplicación.

Espero que esto ayude


10
2018-05-08 05:11