Domanda

non sto avendo molta fortuna con l'aggiornamento di un widget di app con AlarmManager generato trasmissioni. Ecco quello che faccio:

L'inizializzazione AlarmManager su AppWidgetProvider#onEnabled

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

Ho anche definisco ricevitore trasmissione che ascolta solo per gli aggiornamenti che sparavano dal AlarmManager. Quando l'aggiornamento è sparato codice viene eseguito AsyncTask che effettua una chiamata di rete. Quando la AsyncTask è completato (onPostExecute) utilizza esempio precedentemente ottenuto di AppWidgetManager per aggiornare il widget (s). Tutto funziona bene fino a quando in realtà nei registri vedo messaggio "Process com.foo.myapp (pid 12345) has died" dopo di che il AlarmManager mai spara un altro aggiornamento.

Ho bisogno di avere un qualche tipo di controllo che si riavvierà gli allarmi? Per esempio quando l'utente accede l'applicazione madre del widget? Come faccio a garantire che posso completare l'operazione lunga corsa e tornare al widget se la mia app muore nel mezzo della richiesta?

È stato utile?

Soluzione

  

Quando l'aggiornamento si esegue il codice licenziato   AsyncTask che effettua una chiamata di rete.

Se questo è all'interno del BroadcastReceiver, che non funzionerà. Non si può tranquillamente discussioni forcella da un BroadcastReceiver e AsyncTask forcelle efficacemente un thread per eseguire il suo compito in modo asincrono.

Invece, si dovrebbe delegare annoso lavoro ad un servizio iniziato da l'allarme BroadcastReceiver.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top