Iniciando AsyncTask recursivamente después de un intervalo de 5 minutos
Quiero crear una instancia de una clase (que extiende Asynctask
) y llamar su método execute()
cada 5 minutos. Para eso intenté llamar Thread.sleep(5*60*1000))
en el método onPostExecute()
y luego crear una nueva instancia de la clase. El código es el siguiente.
public class MyAsyncTask extends AsyncTask<String, Void, String> { protected String doInBackground(String... arg0) { //whatever I want to do } protected void onPostExecute(String result) { Thread.sleep(5*60*1000); new MyAsyncTask().execute("my String"); } }
Pero el uso de este código bloquea la interfaz de usuario durante 5 minutos. He leído en alguna parte que el código en onPostExecute()
se ejecuta en el subproceso de la interfaz de usuario. Esto explica por qué la interfaz de usuario está bloqueada. Pero, ¿cómo puedo crear una nueva instancia de AsyncTask
sin bloquear la interfaz de usuario?
- ¿Cómo puedo ejecutar esta clase en el hilo de interfaz de usuario?
- Asynctask vs hilo en android
- Servicio v / s AsyncTask
- ¿Cómo se puede utilizar una interfaz para diferentes tareas de fondo android?
- El método findViewById (int) no está definido
Alguna sugerencia ? Gracias.
- ¿Cómo dar una barra de progreso para la descarga?
- CalledFromWrongThreadException: Sólo el subproceso original que creó una jerarquía de vistas puede tocar vistas
- Ámbito de la actividad y Asynctask
- ¿Cuál es el meanining de 3 puntos en parámetros de función?
- Problemas al llamar a AsyncTask de IntentService
- Continuar tarea después de terminar todas las tareas
- ¿Puedes tener dos AsyncTasks en una Actividad?
- ListView onScroll añadir más elementos
Utilice este código en el onPostExecute.
new Handler().postDelayed(new Runnable() { @Override public void run() { new MyAsyncTask().execute("my String"); } }, 5*60*1000);
Utilice este código
Timer timer = new Timer(); timer.schedule( new TimerTask() { public void run() { new MyAsyncTask().execute("my String"); } }, 0, 5*60*1000);
Hay muchas maneras de repetir las tareas, pero después de una gran cantidad de experimentación he encontrado que ejecutar una tarea regular sin la actividad realmente en ejecución debe ser a través de un AlarmManager. Todas las demás técnicas son para aplicaciones que necesitan una interfaz de usuario en ejecución. Handler funciona bien @ respuesta Sagar es bueno.
Consulte el ejemplo del administrador de alarmas , que desea ejecutar como fondo / sin interfaz de usuario.
- Mostrar / ocultar la vista de lista
- Comenzar con la programación móvil. ¿Qué es una buena plataforma?