Pregunta

No estoy teniendo mucha suerte con la actualización de un widget de aplicación con las transmisiones AlarmManager generado. Esto es lo que hago:

La inicialización AlarmManager en AppWidgetProvider#onEnabled

AlarmManager alarms = (AlarmManager) context.getSystemService(
        Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime(), 60000, pendingIntent);

También defino receptor de radiodifusión que simplemente escucha para las actualizaciones que disparaban por el AlarmManager. Cuando se dispara actualización de código se ejecuta AsyncTask que hace una llamada a la red. Cuando el AsyncTask se completa (onPostExecute) que utiliza ejemplo obtenida previamente de AppWidgetManager para actualizar el widget (s). Todo funciona realmente bien hasta que en los registros de Veo mensaje "Process com.foo.myapp (pid 12345) has died" después de lo cual el AlarmManager nunca se disparará otra actualización.

¿Es necesario tener algún tipo de verificación que se reinicie las alarmas? Por ejemplo, cuando el usuario accede a la aplicación de los padres del widget? ¿Cómo me aseguro que yo puedo completar la tarea larga y volver al widget si mi aplicación muere en medio de la solicitud?

¿Fue útil?

Solución

  

Cuando se dispara la actualización se ejecuta código   AsyncTask que hace una llamada a la red.

Si esto está dentro de la BroadcastReceiver, eso no funcionará. No se puede hilos de seguridad de la horquilla de un BroadcastReceiver y AsyncTask horquillas efectivamente un hilo para realizar su tarea de forma asíncrona.

En su lugar, se debe delegar el trabajo de larga duración a un servicio partido de la alarma BroadcastReceiver.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top