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?

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.

  • No se puede reanudar una actividad cuando se utiliza un viewPager
  • ¿Cuál es el punto de cifrar anyting en Android (o Java) si el código fuente puede ser ingeniería inversa?
  • ¿Cuál es la manera optimizada?
  • Eclipse ADT se congela al ejecutar aplicaciones de Android
  • Obtener valor de ArrayList <NameValuePair> por nombre
  • ¿Cómo crear la imagen simple programatically?
  • ¿Por qué mis elementos de ListView no se pueden hacer clic?
  • Smack 4.1 Problema de re-conexión
  • cómo crear androide linearlayout con RTL orientación horizontal
  • Android - ¿Cómo es posible que un servicio siga funcionando después de que la Actividad haya sido cerrada?
  • ToByteArray () no se resolverá para el inicio de sesión de facebook
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.