Android: ¿la reflexión es mala?

Soy nuevo en Android, pero he hecho bastante Java en el servidor.

Yo estaba leyendo acerca de Intents, y en particular sobre la diferencia entre el envío de datos adicionales (clases) a través de Serializable vs Parcelable . Parece haber un consenso de que Serializeable tiene un mal desempeño, y Parcelable es preferible. En algunos lugares he visto que declaró que Serializeable es malo porque utiliza la reflexión.

Eso conduce a un par de preguntas para mí:

  1. ¿La reflexión en general se considera mala? ¿Debo evitar cualquier biblioteca que depende en gran medida de la reflexión? Por ejemplo, si necesito deserialización JSON (de algún servicio web), ¿ no debo usar Jackson o Gson? Es que la basura org.json realmente "mejor práctica" en Android-tierra?

  2. Si de verdad debería evitar la reflexión (y por lo tanto Serializable ), ¿hay alguna alternativa a la fea, Parcelable gruesos Parcelable ? Los Intents son todos explícitos, y no los estoy transmitiendo fuera de la aplicación. Supongo que no entiendo por qué en el proceso de mensajería no puede pasar una referencia al objeto dentro de la Intención.

RE pregunta # 2:

 I guess I don't understand why in-process messaging can't just pass a reference to the object inside the Intent. 

Al parcelar (o serializar) el objeto, Android puede volver a crearlo cuando la actividad contenedora se vuelve a crear. Android controla el ciclo de vida de las actividades y puede destruir en cualquier momento su actividad, incluso si está activa / visible (por ejemplo, rotación de pantalla, recuperar memoria para manejar una llamada telefónica entrante, …). Cuando Android recrea su actividad, le pasa un objeto denominado Bundle que incluye todos sus objetos parcelizados. Esto le permite restaurar el estado de su actividad, pero tenga en cuenta que estos no son los objetos originales – se han reconstituido a partir de sus representaciones parceladas.

  is there any alternative...? 

Si desea ser capaz de recrear adecuadamente su actividad, a continuación, la parcelación y la serialización son sus opciones. No sería tan rápido para descartar serialización sin embargo. Mientras que en general es menos eficaz, en muchos casos, esto probablemente no será detectable por el usuario. Tenga en cuenta que Android fue diseñado en un momento en que los dispositivos móviles tienen mucho menos poder de procesamiento que en la actualidad. Por lo tanto, las optimizaciones de rendimiento como la parcelabilidad eran probablemente más una preocupación.

Una alternativa digna de mención, que es probablemente aún menos eficaz sería escribir el objeto en el disco usted mismo. A continuación, en la intención, pase un puntero al archivo (o al registro de la base de datos). Una variación en esto sería utilizar Android SharePreferences para guardar los datos. Sólo menciono esto porque pasar grandes cantidades de datos en un intento a veces puede fallar. No hay un límite duro en el tamaño máximo del objeto, pero muchas personas, incluido yo, han visto este fracaso.

  • Cómo obtener datos de Azure DB Table en una aplicación de Android?
  • Convertir colorPrimary a colorPrimaryDark (cuánto más oscuro)
  • ¿Existe un patrón de registro de GCM?
  • Desarrollo de Android con editor de notas y línea de comandos
  • android: crear el oyente del tecleo programmatically con la clase anónima
  • "Nueva etiqueta recopilada" en lugar de leer etiquetas de aplicación - NFC android
  • Cómo convertir la cadena en largo
  • ¿Cómo encontrar el nombre del país desde el nombre de la ciudad en Java?
  • Error de instalación en Android Gingerbread y Froyo - INSTALL_FAILED_DEXOPT
  • Singletons vs. Contexto de la aplicación en Android?
  • Cómo crear un setter personalizado de plantillas Intellij para su uso con Guava
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.