¿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.

  • Circular revela la animación al sustituir el fragmento
  • SimpleDateFormat - fecha imposible
  • Cómo obtener el espaciado de caracteres de fuente en Android
  • Devolución de una matriz de AsyncTask volver a Actividad principal
  • Pasando el archivo con intención, ¿cómo lo recupero?
  • Optimizaciones de Java: (Hotspot / Dalvik) Optimización del método final devolver una constante?
  • Cómo acceder a Android desde el navegador
  • Transmitir audio en vivo de Android al servidor
  • Filtro para android ListView - Caracteres de espacio
  • ¿Se llama el método onUpgrade?
  • Android Studio obtiene una advertencia obsoleta incluso con @SuppressWarnings ("deprecation")
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.