Patrón de diseño para un servicio como la arquitectura

Qué patrón de diseño sería inteligente en el que los siguientes componentes (simplificado) existen:

3 Componentes
GUI
– Buscador de datos
– Base de datos

Diseño

No tengo acceso al servidor en Internet, es sólo un Data-Source. Los datos que se establecen en Internet son siempre los más nuevos, la base de datos local es sólo una copia (caché) de la de Internet. La interfaz gráfica de usuario puede solicitar y actualizar la caché local, el Service-like-component recupera de forma asincrónica los datos más recientes, lo que puede tardar un tiempo. La GUI sólo muestra datos de la base de datos local, que puede buscar de forma síncrona.

Así que mi pregunta es, ¿qué clases usarías para el servicio que ejecutaría a largo plazo con capacidades Progressbar? ¿Hay mejores diseños para este tipo de "problema"? ¿Existen mejores prácticas?

En el componente de servicio similar:

  • Una interfaz (método) para iniciar el proceso de actualización. Normalmente, este servicio devolverá un jobId para indicar un trabajo que se está procesando en segundo plano
  • Otra interfaz (método) para obtener el estado basado en un jobId determinado. La implementación de este servicio podría devolver un estado, percentCompleted o cualquier otra información relevante que le dirá al llamador el estado actual del proceso de actualización. La implementación de este método debe ser capaz de reportar un progreso incremental (por ejemplo, reportar el almacén incremental en el almacenamiento local) para hacer una barra de progreso precisa, de lo contrario la mejor interfaz de usuario podría mostrar la barra de progreso giratoria.
    • Tenga en cuenta que si no es posible implementar dicho informe incremental, el proceso de actualización probablemente debería usar un uso AsyncTask típico que ejecute la actualización en segundo plano e informe al usuario cuando haya terminado. Si esta operación puede tardar un tiempo, puede implementar la finalización de la actualización a través de la barra de notificaciones de Android o la notificación push.

Suponiendo que tiene la interfaz para obtener el progreso de la actualización, puede utilizar el AsyncTask onProgressUpdate para informar sobre el progreso de la actualización. El método está específicamente diseñado para ello.

Sus pasos son más o menos como sigue:

  • Ejecute la interfaz para actualizar a través de un AsyncTask. Dado que su actualización se está realizando de forma asíncrona, esta tarea en particular debe volver bastante rápidamente con un informe de estado si la ejecución se ejecuta correctamente o falla debido a alguna excepción junto con el jobId que se está ejecutando actualmente
  • Inicie otro AsyncTask que está haciendo ping al estado de la actualización e informe del progreso a través de onProgressUpdate . AsyncTask parece más o menos como
 public class GetUpdateStatusAsyncTask extends AsyncTask { protected Integer doInBackground(Integer... param) { // this is the jobId that you get from the previous AsyncTask that you use to kick off the // the update process int jobId = param[0]; double percentCompleted = fetchStatus(jobId); while(percentCompleted != 100.00) { publishProgress(percentCompleted); } // return status code return 1; } protected void onProgressUpdate(Double... progress) { // set the progressBar here } protected void onPostExecute(Long result) { // done, handle status code } private double fetchStatus(int jobId) { double percentCompleted = 0.0; // call interface to get the update based on the jobId // return percentCompleted status or make a more complex object if you need // more detail info return percentCompleted; } } 
  • ¿La variable estática es realmente segura para intercambiar datos entre actividades?
  • Android: forma correcta de saltar entre fragmentos
  • ¿Cuál es la estructura / patrón de android / java para organizar las llamadas de servicio web http en el proyecto?
  • Android: Cómo implementar "control distribuido"
  • onCreateView () no se llama inmediatamente después de FragmentTransaction.commit ()
  • Separar las preocupaciones de la actividad y GoogleApiClient
  • Qué patrones de diseño debo aprender antes de iniciar Android Development
  • Aplicación de diseño con más código de confusión?
  • Implementación de MVP de Android
  • ¿Es preferible usar Activity.onAttachFragment o Fragment.onAttach para comunicarse entre una Actividad y un fragmento anidado?
  • ¿Cuáles son los patrones de diseño utilizados en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.