Parece haber un par de formas de realizar una tarea en segundo plano. Mi uso es que mi aplicación busque un archivo de datos cada x minutos, independientemente de si mi GUI se está ejecutando, y si el teléfono está durmiendo o no.Cómo programar una tarea en segundo plano
Uso un alarmmanager para programar una intención que coincida con un receptor de difusión. en el método onRecieve, comienzo un servicio (startService), que genera una AsyncTask. La tarea recupera datos, los almacena y luego detiene el servicio.
en el método onRecieve Adquirí un PARTIAL_WAKE_LOCK, antes de comenzar el servicio, y justo antes de llamar a stopSelf() en el servicio, lo lanzo nuevamente.
¿Es esta la mejor manera de hacerlo? ¿Incluso necesito el servicio en este escenario?
Experimento un comportamiento extraño con esta configuración, donde la configuración funciona durante horas y luego se detiene de repente, lo que hace que sea muy difícil de depurar.
¿Alguien tiene un método simple infalible para lograr el mismo fin?
aha! entonces, ¿no podría comenzar mi asynctask en el emisor? incluso si obtengo el wakelock en onrecieve y lo lanzo cuando termina la asynctask? gracias por la información, y supongo que tendré que burlarme un poco más por mi alarma extraña para – Wilken
"¿así que no podría comenzar mi asynctask en el emisor?" No lo creo, pero no lo he intentado.AsyncTask tiene su propio grupo de subprocesos, y es * posible * que puede ejecutar con seguridad una AsyncTask desde un BroadcastReceiver. – CommonsWare
Gracias por la idea de usar IntentService, no lo sabía. Ahora he eliminado mi servicio y AsyncTask. Mucho más elegante. – Wilken