Diseño de arquitectura Android – ¿Cómo hacerlo bien?
¿Cómo se ve una buena arquitectura para una aplicación para Android? ¿Debe realizarse toda la "lógica de trabajo / negocio" en un servicio de fondo y la Actividad se comunica sólo con el servicio para consultar / extraer datos desde algún lugar (local / distante)?
¿Implementarías el "servicio" que la Actividad llama como un verdadero servicio Android? O un POJO-Singleton que hace el trabajo (tal vez utilizando hilos de fondo). O instanciar los subprocesos de fondo en su actividad para las acciones que consumen mucho tiempo (consulte un servicio web).
- Mantener el último elemento visible de un ListView cuando el tamaño del ListView cambia
- TextInputLayout setErrorEnabled no crea nuevo objeto TextView
- Android: determina si el código debe residir en la vista de actividad o personalizada
- Inicie una actividad utilizando una animación de volteo en 3D
- Cómo agregar mediante programación varios LinearLayouts en una vista y, a continuación, agregar a ViewFlipper?
¿Cómo se abstrae su acceso a los datos de la manera correcta? ¿Utilizarías un ContentProvider para acceder / abstraer tus datos? ¿Cómo / De dónde debe ser consultado? ¿Actividad? ¿Servicio? ..?
He intentado buscar un buen diseño de arquitectura de aplicaciones, pero solo he encontrado cómo se ve la arquitectura de Android, no cómo debería ser una aplicación de Android.
Entonces, ¿cuál es su opinión sobre eso? ¿Qué componentes de una aplicación de Android deben comunicarse entre sí para garantizar la mejor extensibilidad / encapsulación, …?
- Android - personalización de las pestañas de barra de acción de sherlock
- ¿Cómo hacer la actividad no a pantalla completa?
- SVG vs PNG en Android
- ¿Cuándo debe utilizarse el archivo dimens.xml en Android?
- ¿Cómo puedo editar el código fuente de android os teclado?
- MVC en Android: ¿Aplicación o servicio para actualizaciones asíncronas?
- Habilitar desplazamiento dentro de EditText que está en ScrollView
- Android tablelayout y cambiar el tamaño de los botones
No hay una respuesta a esta pregunta. Un buen diseño de OO no es específico de Android. Yo diría que la regla es – si el marco le da un objeto de alto nivel (como el servicio en el caso de Android) que se adapte a su caso de uso, lo utilizan. Si usted se encuentra haciendo implementaciones POJO de las mismas cosas que obtiene de forma gratuita con el marco, vaya con el marco.
En cuanto a la separación de las preocupaciones, esto es estándar OO cosas. No ponga nada en sus clases de actividad que no sea el trabajo de la actividad. Sobrecargar la Actividad con métodos y propiedades que la Actividad necesita pero no son realmente el trabajo de la Actividad es malo – hace que la intención de su Actividad sea difícil de entender.
Por lo general, separar las cosas en sub-paquetes en mis aplicaciones.
- Com.myname.myproject.app – clases base, funcionalidad de aplicación global
- Com.myname.myproject.net – cosas de red, utils relacionados con la red
- Com.myname.myproject.data – ayudantes db, proveedores, etc
- Com.myname.myproject.model – modelo de objeto
Etc.
En cuanto a la comunicación dentro de su aplicación …
Siempre tengo una clase de aplicación personalizada que me registro en el manifiesto. De esta manera, cuando tengo controladores y ayudantes que necesitan ser una "instancia única", no tengo que hacer todo ese material de singleton seguro de hilo loco … solo conservo una copia global de.
RoboGuice es un marco de inyección de dependencia que hace que esto sea aún más fácil de lograr … definitivamente vale la pena mirar. Si esto te interesa, el Grupo de Google para RoboGuice es grande y está constantemente lleno de los creadores del marco que básicamente puede responder a cualquier cosa que necesite.
En cuanto a la comunicación en la aplicación, uso mi controlador de instancia única y las clases de estado para mantener el estado y hacer tareas comunes, y por lo general utilizan BroadcastIntents para comunicar de nuevo a las actividades de los servicios
- Actualizaciones de OTA para la aplicación Android del propietario del dispositivo (modo quiosco)
- Clickable CardView dentro de NestedScroll no activa el desplazamiento