2011-07-07 9 views
6

Yo uso el consejo dado por Effective Java de Joshua Bloch, Item 52: Refer to objects by their interfaces.Deberíamos referirnos a los objetos por sus interfaces en la plataforma Android

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 optimización del rendimiento, ya que el siguiente código será más lento.

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

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

En dispositivos sin un JIT, es cierto que la invocación de métodos a través de una variable con un tipo exacto en lugar de una interfaz es ligeramente más eficiente. (Entonces, por ejemplo, era más barato invocar métodos en un mapa HashMap que en un mapa, aunque en ambos casos el mapa era un HashMap). No fue el caso que esto fue 2 veces más lento; la diferencia real fue más como 6% más lenta. Además, el JIT hace que los dos sean indistinguibles.

¿Debemos asumir que nuestros dispositivos no tienen JIT y remitir objetos sin interfaces? O, ¿debemos adoptar el consejo de Joshua Bloch?

Respuesta

2

A partir de Android 2.2, el Dalvik VM (que ejecuta el bytecode de Dalvik que es el resultado de su código fuente de Java) tiene un compilador Just-In-Time (JIT).

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

Si a apuntar pre-2.2 dispositivos y los 6% por encima en la invocación (que no se debe confundir con una eficacia general del 6% desaceleración de su aplicación!) Tiene un efecto grave en su aplicación, a continuación, que la optimización puede valer la pena.

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

Esto es preferible, más allá de la razón de rendimiento. Es una variable privada, usa el tipo más específico conocido.

+0

La razón no es concreta. No tenía nada que ver con la variable privada. El ejemplo proporcionado por Joshua Bloch también es privado. –

+0

por lo que Joshua Bloch está equivocado. – irreputable

+2

Creo que es bastante arrogante decir eso. Al menos necesita proporcionar algún ejemplo y hecho del mundo real para respaldar su afirmación. Al menos en Java efectivo de Joshua Bloch, proporciona un ejemplo muy bueno del mundo real sobre por qué es mejor usar una interfaz. –

Cuestiones relacionadas