Cómo hacer que la tarea Async se ejecute repetidamente después de un intervalo de tiempo como Temporizador ... En realidad, estoy desarrollando una aplicación que descargará automáticamente los últimos mensajes no leídos del servidor y para Para eso tengo que buscar actualizaciones del servidor después de unos intervalos de tiempo fijos ... Sé que se puede hacer fácilmente a través del temporizador, pero quiero usar una tarea asíncrona que creo que es más eficiente para las aplicaciones de Android.Cómo ejecutar la tarea Async repetidamente después de intervalos de tiempo fijos
Respuesta
public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}
Usted puede simplemente un controlador:
private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handle m_handler;
@Override
protected void onCreate(Bundle bundle)
{
...
m_handler = new Handler();
}
Runnable m_statusChecker = new Runnable()
{
@Override
public void run() {
updateStatus(); //this function can change value of m_interval.
m_handler.postDelayed(m_statusChecker, m_interval);
}
}
void startRepeatingTask()
{
m_statusChecker.run();
}
void stopRepeatingTask()
{
m_handler.removeCallback(m_statusChecker);
}
Pero le recomiendo que comprobar este marco: http://code.google.com/intl/de-DE/android/c2dm/ es un enfoque diferente: el servidor notificará al teléfono cuando algo está listo (por lo tanto, ahorrar algo de ancho de banda y :) rendimiento)
gracias alot.Actually estoy comenzando a desarrollar el lado del cliente del lado application.Server ya está trabajando para la misma aplicación desarrollada para iPhone y me tienen que usar el mismo servidor para android – Waseem
Soy nuevo a enhebrar en android ¿A dónde le pasa el ejecutable al manejador? –
para responder @DheeB, el que responde no lo menciona aquí, aunque debería ser durante la creación de instancias como este m_handler = new Handler (m_statusChecker); Otro motivo por el que esta solución podría no funcionar, porque la pregunta indica claramente que habrá operaciones de red que "descargarán automáticamente todos los últimos mensajes de bienvenida no leídos del servidor". Sin embargo, aunque esté utilizando un controlador, este manejador/ejecutable aún se está ejecutando. en el hilo de UI que todavía está bloqueando. Debe iniciarlo manualmente en un hilo separado. – tony9099
¿no sería más eficiente para crear un servicio y programarlo a través del Administrador de alarma?
Crear un servicio es un dolor, entonces muchas cosas para cuidar en un servicio. Prefiero usar un temporizador. – Siddharth
Los servicios son fáciles de iniciar y detener. Además, no están vinculados al hilo de UI. Entonces sí, utilizaría un servicio. –
@IgorGanapolsky sí lo son. Pero también son una molestia, ¿por qué crearían asyntask, timer y estos módulos para operaciones más pequeñas si no tuvieran sentido y todo se hiciera a través de un servicio? – tony9099
//Every 10000 ms
private void doSomethingRepeatedly() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try{
new SendToServer().execute();
}
catch (Exception e) {
// TODO: handle exception
}
}
}, 0, 10000);
}
Se recomienda utilizar ScheduledThreadPoolExecutor over Timer para todos los códigos nuevos en la documentación de Android https://developer.android.com/reference/java/util/Timer.html –
- 1. ejecutar una tarea a intervalos específicos en Python
- 2. Ejecutar una tarea después de que WebView esté completamente cargado
- 3. Llamando a Async Tarea
- 4. Eventlet/async general Granularidad de la tarea de E/S
- 5. ¿Fusionar intervalos de tiempo superpuestos?
- 6. Rails cómo ejecutar la tarea de rake
- 7. ¿Cómo se promedian los intervalos de tiempo?
- 8. Cómo representar los intervalos de tiempo en un horario
- 9. Git-Svn: conservar la marca de tiempo después de ejecutar
- 10. ¿Cómo se usa ScheduledExecutorService en java para llamar a una implementación invocable a intervalos fijos?
- 11. ¿Cómo puedo hacer que una barra de desplazamiento solo se desplace a intervalos fijos?
- 12. ¿Cómo programo que una tarea se ejecute a intervalos periódicos?
- 13. Personalice los intervalos de tiempo en Fullcalendar
- 14. Android: ejecutar código en intervalos regulares
- 15. ¿Cómo adjuntar una tarea personalizada para ejecutar antes de la tarea de prueba en sbt?
- 16. Cómo rastrear si se está ejecutando una tarea async/awaitable
- 17. Usar ASYNC Tarea para cargar los pines de mapa
- 18. ¿Cómo puedo formatear los intervalos de tiempo en Cocoa?
- 19. Tarea fromAsync tiempo de espera
- 20. Línea de comando para ejecutar la tarea Ant con guión en el nombre de la tarea
- 21. Determinación de intervalos de tiempo de milisegundos en Cocoa
- 22. Ejecutar tarea en segundo plano en JavaFX
- 23. ¿Cómo manejar el tiempo de espera en Async Socket?
- 24. Ejecutar tarea SBT desde Eclipse
- 25. Linux comando a ejecutar la escritura en intervalos
- 26. ¿Ejecutar SQL en una tarea de Gradle?
- 27. ¿Cómo ejecutar una tarea diariamente desde Java?
- 28. ¿Cómo ejecutar un método C# sin bloqueo a intervalos regulares?
- 29. asíncrono CTP - Tarea cuestión de tiempo de espera
- 30. Ejecutar el carpincho en la tarea de rake
muchas gracias .... – Waseem
Una tarea asíncrona funciona de todos modos en su propio hilo. ¿Por qué ejecutarlo en un controlador? – Siddharth
Sí, la tarea asíncrona se ejecuta en un subproceso independiente, pero no se puede iniciar desde otros subprocesos que el subproceso de interfaz de usuario. El controlador, creo, está ahí para permitir eso. – r1k0