¿Deberíamos referirnos a los objetos por sus interfaces en la plataforma Android

Utilizo el consejo dado por Joshua Bloch Effective Java, Item 52: Refer to objects by their interfaces .

Sin embargo, en la mayor parte del código de ejemplo viene con Android, me doy cuenta de que el siguiente código es bastante común.

 private ArrayList<Integer> mPhotos = new ArrayList<Integer>(); 

Entiendo que esto se debe a la finalidad de optimización de rendimiento, como el siguiente código será más lento.

 private List<Integer> mPhotos = new ArrayList<Integer>(); 

Sin embargo, ¿sigue siendo válida esta técnica de optimización? Como si estuviera leyendo http://developer.android.com/guide/practices/design/performance.html

En dispositivos sin JIT, es cierto que invocar métodos a través de una variable con un tipo exacto en lugar de una interfaz es un poco más eficiente. (Por ejemplo, era más barato invocar métodos en un mapa de HashMap que en un mapa de mapa, aunque en ambos casos el mapa era un HashMap). No era el caso que esto era 2 veces más lento; La diferencia real era más como 6% más lento. Además, el JIT los hace efectivamente indistinguibles.

¿Necesitamos asumir que nuestros dispositivos están sin JIT, y refieren objetos sin interfaces? ¿O acaso debemos adoptar el consejo de Joshua Bloch?

A partir de Android 2.2, la máquina virtual Dalvik (que ejecuta el bytecode Dalvik que es el resultado de su código fuente Java) tiene un compilador Just-in-time (JIT).

No sé si esta optimización en particular es parte del JIT o no, pero debe ser probable en dispositivos reales.

Si apunta a dispositivos pre-2.2 y esos 6% de sobrecarga en la invocación (que no debe confundirse con una desaceleración excesiva del 6% de su aplicación) tiene un efecto grave en su aplicación, entonces esa optimización podría valer la pena.

 private ArrayList<Integer> mPhotos = new ArrayList<Integer>(); 

Esto se prefiere, más allá de la razón de rendimiento. Es una variable privada, utiliza el tipo más específico conocido.

  • Cerrar el cajón de navegación mediante programación de otra clase
  • Cómo hacer una copia de un archivo en android?
  • Cómo recurrir completamente a SortedList de RecyclerView
  • Hacer una animación de fragmentos de inserción
  • Descripción de la anotación @SuppressLint ("NewApi")
  • Cómo configurar un diseño de menú principal en Android?
  • Recomienda una biblioteca de juegos Java / Android - tarjeta, tablero, etc.?
  • Enviar archivos multiparte con retrofit: 2.0.0-beta1
  • La aplicación se bloquea cuando ejecuto Proguard en GSON (que utiliza enum)
  • SMS raw pdu en Android
  • ArcMenu mainImage Necesito en la parte inferior de la pantalla. OnMeasure no lo deja entrar en la parte inferior de la pantalla
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.