Mejor práctica: Actualizar ArrayAdapter continuamente

Tengo un servicio que obtiene algunos datos de la web y actualiza una lista que se "almacena" en la aplicación.

Por lo tanto, puedo acceder a él desde la actividad principal y utilizarlo para mi ArrayAdapter.

Cuando actualizo los datos, se cambia el elemento de referencia de la lista.

Mi pregunta es, ¿cómo es la mejor práctica para actualizar los datos en el adaptador en la actividad principal?

Tengo dos soluciones en mente, pero no sé si son correctas de esa manera. Adicional a eso, me gustaría implementar una versión que no está usando mucha batería!

Primero: Hilo que se llama cada segundo, actualizando el adaptador con notifyDataSetChanged ():

private void startListUpdateThread() { Thread ListManageThread = new Thread() { LinkItem listItem; public void run() { Log.d("DL", "List Update - start"); while(true) { runOnUiThread(UpdateGUIList); try { Thread.sleep(1000); //5Sekunden! } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.e("DL", "ERROR: InterruptedException - " + e.getMessage()); } } } }; ListManageThread.start(); } private Runnable UpdateGUIList = new Runnable() { @Override public void run() { mFileAdapter.notifyDataSetChanged(); } }; 

Segundo: Utilizar un Handler con retraso final privado Handler handler = new Handler ();

 private void startListUpdate() { handler.removeCallbacks(UpdateListUI); handler.postDelayed(UpdateListUI, 1000); // 1 second } private Runnable UpdateListUI = new Runnable() { public void run() { //Remove Elements first removeDeletedItemsFromList(); //Update Adapter mFileAdapter.notifyDataSetChanged(); handler.postDelayed(this, 1500); // 1,5 seconds } }; 

Así que, ¿cuál es la mejor manera de hacerlo? ¡Tal vez hay otra manera de hacerlo, pero de la cual no he pensado antes!

En lugar de utilizar el controlador, utilizará la tarea Async. Aunque el manejador funciona aquí, pero es el concepto JAVA y Async Task es Android.

Y puede actualizar la vista de lista mediante: mFileAdapter.notifyDataSetChanged (); Sólo que es correcto.

En lugar de utilizar Handler and Thread , puede utilizar AlarmManager . Simplemente inicie la alarma una vez y actualizará su lista con el período definido de intervalo sin ningún hilo o controlador. Ha creado un servicio y puede hacer referencia a ese servicio mediante AlarmManager.

 AlarmManager mgr = (AlarmManager) arg0.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(arg0, TestService.class); PendingIntent pi = PendingIntent.getService(arg0, 0, intent, 0); mgr.setRepeating(AlarmManager.RTC_WAKEUP, 2000, 2000, pi); 

Y en el TestService puede tener el código para actualizar su Lista.

  • Cómo iniciar una actividad de una clase de hilo en android?
  • ObjectInputStream - ¿Cómo esperar a nuevos datos?
  • Uso de Volley con adaptador de sincronización
  • Android hilo esperar hasta visible
  • Trabajos de fondo de Android para la sincronización con un servicio web
  • AIDL vs Messenger
  • ExecutorService parece estar ejecutando el hilo en la interfaz de usuario?
  • Ejecutar mensajes del controlador en un subproceso de fondo
  • Confundido entre syncAdapter, servicios, cargadores, proveedores y asynctask?
  • Dibujo de lienzo SurfaceView de Android con un hilo
  • Controlador de Android para activar el hilo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.