android handler threadpool timertask scheduledexecutorservice

android - ¿Dónde creo y uso ScheduledThreadPoolExecutor, TimerTask o Handler?



scheduledexecutorservice (1)

Necesito que mi lector de fuentes RSS compruebe el feed cada 10 minutos para nuevas publicaciones, y luego analizarlas si hay nuevas. También necesito actualizar la IU cada minuto.

He leído y escuchado diferentes cosas de varias fuentes. Mi entendimiento actual es que puedo usar ScheduledThreadPoolExecutor para hacer dos hilos programados, y uno de ellos necesita un Handler para actualizar la UI. No estoy seguro sobre cuál es el uso más eficiente de estas clases o TimerTask .

También estoy muy inseguro acerca de dónde hacer subclases de estos. Un amigo sugirió extender TimerTask como una clase interna en mi clase FeedParser para hacerlo más simple. Sin embargo, para implementarlo de esa manera, tengo que usar el método run() para TimerTask sin TimerTask , lo que significa que no puedo simplemente usar los parámetros que necesito para las funciones que deben ejecutarse.

En resumen, ¿cuál es la mejor manera de programar las tareas para esto y dónde implementarlas?


Prefiero usar ScheduledThreadPoolExecutor. Generalmente, si entiendo sus requisitos correctamente, todos estos pueden implementarse en su actividad, TimerTask y Handler no son necesarios, vea el código de muestra a continuación:

public class MyActivity extends Activity { private ScheduledExecutorService scheduleTaskExecutor; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); scheduleTaskExecutor= Executors.newScheduledThreadPool(5); // This schedule a task to run every 10 minutes: scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { public void run() { // Parsing RSS feed: myFeedParser.doSomething(); // If you need update UI, simply do this: runOnUiThread(new Runnable() { public void run() { // update your UI component here. myTextView.setText("refreshed"); } }); } }, 0, 10, TimeUnit.MINUTES); } // end of onCreate() }

Recuerde terminar / cerrar correctamente su tarea ejecutable en Activity.onDestroy (), espero que lo ayude.