Editar: Se ha aclarado la cuestión sobre la base de la respuesta de CommonsWareComo crear un persistente AlarmManager
Estamos programar una alarma a través de un AlarmManager para disparar cada 60 segundos. Cuando se elimina nuestra aplicación, nuestras alarmas parecen no ejecutarse más. ¿Hay alguna manera de hacer que estas alarmas persistan incluso cuando la aplicación es eliminada manualmente o por el sistema?
Esto es un problema para nosotros porque tenemos una aplicación de widget que muestra la hora. Esto significa que necesitamos actualizar el tiempo cada minuto. Para superar el límite de actualización de 30 minutos en el método onUpdate de AppWidgetProvider, utilizamos AlarmManager. Por lo general, funciona bastante bien, pero algunos usuarios han informado que el tiempo no está sincronizado. Después de hablar con varios de ellos, mi sospecha es que nuestra aplicación se está matando manualmente a través de una aplicación asesina de tareas o Android en sí está matando a nuestra aplicación.
Cualquier otra solución alternativa al problema raíz (mantener el tiempo sincronizado en un widget) también es bienvenido.
Este es el código que ejecutamos para programar nuestra alarma:
Intent intent = new Intent(UPDATE_TIME);
PendingIntent pIntent = PendingIntent.getBroadcast(ctx,
0 /* no requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// get alarm params
Date d = new Date();
long timeTilMinuteChange = 60*1000-d.getSeconds()*1000;
long startTime = System.currentTimeMillis() + + timeTilMinuteChange;
AlarmManager am = (AlarmManager) ctx.getSystemService(Context.
am.cancel(pIntent);
am.set(AlarmManager.RTC, System.currentTimeMillis(), pIntent);
am.setRepeating(AlarmManager.RTC, startTime, 60000, pIntent);
Creo que el Alarm Manager no se está destruyendo, pero tal vez los datos se estén volviendo obsoletos. ¿Estás usando variables estáticas? Recuerde que el proceso del appwidget puede y será cerrado por Android (es un receptor) ¿está utilizando alguna variable que esté vinculada a la clase AppWidgetProvider? –
No estoy usando variables estáticas, pero estoy usando una clase estática. Básicamente, la forma en que funciona es que nuestro AppWidgetProvider llama a TimeManager.start (contexto). TimeManager.start establece una alarma de repetición. – christoff
@EfiMK Sé que es una publicación muy antigua, pero como no pude encontrar respuestas en ningún otro lugar, por favor guíese sobre el problema del uso de variables estáticas en la clase appwidgetprovider. – Atihska