2011-09-16 16 views
7

Nella demo , il metodo OnAlarmReceiver (a BroadcastReceiver) onReceive() viene chiamato in risposta a un allarme. Il metodo onReceive() avvia il servizio. Sono utilizzati due Intenti, uno ricevuto da BroadcastReceiver e uno dal Servizio. Questo sembra più complicato che debba essere, perché non solo il Servizio riceve l'Intento da AlamManager?Servizio di sveglia direttamente da AlarmManager

Capisco che il telefono è garantito per non dormire mentre onReceive() sta eseguendo, cioè è avvolto con un blocco scia. Non sono sicuro che la classe Service offra garanzie simili.

È il modo per avviare il servizio direttamente da un allarme, garantendo comunque che il telefono venga riattivato dalla modalità di sospensione e non dorma fino a quando non è possibile acquisire una sveglia?

risposta

14

Questo sembra più complicato che debba essere, perché non solo il Servizio riceve l'Intento da AlamManager?

perché Android non garantisce che il dispositivo sarà rimanere sveglio abbastanza a lungo per un getService()PendingIntent per essere invocato. La garanzia è solo per un getBroadcast()PendingIntent - Android garantisce che il dispositivo rimanga sveglio (tramite un WakeLock) per la durata della chiamata onReceive().

Fidati di me, vorrei poterlo saltare.

+0

OK, grazie per la risposta – alexbirkett

+0

oh è grandioso - mi chiedevo la stessa cosa - apparentemente [nel semplice esempio di allarme dagli esempi API questo non è un problema] (http://stackoverflow.com/a/ 14094314/281545) - o mi manca qualcosa? –

+1

@Mr_and_Mrs_D: Quel campione ha così tanti problemi, non è nemmeno divertente. Un giorno, inoltrerò un problema sperando di cambiarlo. – CommonsWare