Setter y Getter funciones. En Android. Rendimiento de gastos generales?
Cuando estaba aprendiendo la edición estándar de Java, las funciones getter y setter se usaban a menudo para ocultar variables y para reducir el acceso directo a ellas. Me han dicho por varias fuentes que en Android no debe utilizar estas funciones y sólo modificar las variables directamente. La razón es que hay una pérdida de rendimiento debido a gastos generales cuando se utiliza getters y setters se utiliza en Android. Resultando en más uso de memoria y ralentizando el sistema.
¿Hay algo de cierto en esto? Y si hay, por qué la pérdida de rendimiento por usar getter y setter?
- Android - Cómo cambiar fragmentos en el cajón de navegación
- Java: ¿Cómo comprobar si el objeto es nulo?
- Tengo que hacer clic dos veces en el botón para que funcione
- Cómo navegar desde una pantalla a otra pantalla
- AutoCompleteTextView fuerza para mostrar todos los elementos
- ¿Cómo manejar los cambios de la superposición de volumen remota de MediaSession?
- Android sqlite insert no está insertando
- No se puede resolver el símbolo JSONParser
- ¿Cuál es la manera más rápida de filtrar datos de ArrayList?
- Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
- Aparece la tecla "nameValuePairs" extraña cuando se utiliza Gson
- JSONArray no funciona cuando recibo la cadena JSON del servidor
- DoubleClick for Publishers en Google Play Services causa NullPointerException en 4.2.2
A partir de la documentación que se encuentra aquí con un getter y setter es una mala idea en android. Como dice,
Esto es una mala idea en Android. Las llamadas a métodos virtuales son costosas, mucho más que las búsquedas de instancia. Es razonable seguir prácticas comunes de programación orientada a objetos y tener getters y setters en la interfaz pública, pero dentro de una clase siempre debe tener acceso a los campos directamente.
Obtenga más información sobre el rendimiento aquí .
De acuerdo con los consejos de rendimiento proporcionados por Google android equipo:
Sin un JIT, el acceso directo al campo es aproximadamente 3 veces más rápido que invocar un getter trivial. Con el JIT (donde el acceso directo al campo es tan barato como el acceso a un local), el acceso directo al campo es aproximadamente 7 veces más rápido que invocar un getter trivial.
Sin embargo estoy de acuerdo en que una buena práctica de codificación es más importante y el equipo también mencionó que:
Tenga en cuenta que si está utilizando ProGuard, puede tener lo mejor de ambos mundos, ya que ProGuard puede acceder a los accesores para usted.
Por lo tanto, creo que está bien usar el getter y setter;)
Referencia
La pérdida de rendimiento para setters y getters es insignificante. Los campos públicos son una mala práctica y violan los principios orientados a objetos de la encapsulación de datos y la ocultación de la información.
El uso de un setter o getter requiere una llamada de propiedad más que acceder al campo directamente. Eso no es nada, así que no te preocupes por eso, enfócate en escribir un buen código.
editar:
Para aclarar, esto es del mismo documento android que los otros carteles están citando:
Es razonable seguir prácticas comunes de programación orientada a objetos y tener getters y setters en la interfaz pública, pero dentro de una clase siempre debe tener acceso a los campos directamente.
En otras palabras, usted todavía necesita getters y setters. Usted sólo debe tratar de evitar llamar desde dentro de la clase que contiene esos métodos ya que tiene acceso directo al campo.
- ¿Por qué algunos códigos de Android tienen campos públicos?
- El demonio de compilación de Gradle desapareció inesperadamente (puede haber sido destruido o puede haberse estrellado) mientras construía un proyecto de Android en Jenkins