¿Dónde puedo crear y usar ScheduledThreadPoolExecutor, TimerTask o Handler?
Tengo que hacer que mi lector de RSS Feed verifique el feed cada 10 minutos para los nuevos mensajes, y luego analizarlos si hay nuevos. También necesito actualizar la interfaz de usuario sobre cada minuto.
He leído y escuchado cosas diferentes de varias fuentes. Mi comprensión actual es que puedo utilizar ScheduledThreadPoolExecutor
para hacer dos hilos programados, y uno de ellos necesita un Handler
para actualizar la interfaz de usuario. No estoy seguro de cuál es el uso más eficiente de estas clases o TimerTask
.
- Java - Timer.cancel () v / s TimerTask.cancel ()
- Cómo determinar si la tarea del temporizador ha finalizado
- TimerTask vs Thread.sleep vs Handler postDelayed - más preciso para llamar a la función cada N milisegundos?
- Error de Android: "No se pudo crear la instancia de epoll" o "No se pudo crear el canal de despertador"
- El temporizador Android llega tarde cuando la pantalla del teléfono está bloqueada
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 sencillo. 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 necesitan ejecutarse.
En resumen, ¿cuál es la mejor manera de programar las tareas para esto, y dónde implementar éstos?
- Visibilidad de ImageView Error con temporizador
- Android - Cómo detener y detener el temporizador
- ¿Cómo puedo implementar un Timer / TimerTask que ejecuta un AsyncTask? (Androide)
- Android: haga una parte del código cada 5 segundos
- Timertask o manejador
- Tarea del temporizador VS Uso del administrador de alarmas en el servicio de Android
- TimerTask ya está programado
- Timer.scheduleAtFixedRate no se detiene cuando llamo cancelar
Prefiero usar ScheduledThreadPoolExecutor. Generalmente, si entiendo sus requisitos correctamente, todos estos se pueden implementar en su actividad, TimerTask y Handler no son necesarios, vea el código de ejemplo 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() }
Recuerda terminar / cerrar tu tarea ejecutable correctamente en Activity.onDestroy (), espero que ayude.
- Enlace de datos de Android ObservableList problema de comportamiento
- Uso de cookies en las actividades al utilizar HttpClient