2011-09-16 11 views
7

W wersji demonstracyjnej https://github.com/commonsguy/cwac-wakeful wywoływana jest metoda OnRowarReceiver (a BroadcastReceiver) onReceive() w odpowiedzi na alarm. Metoda onReceive() uruchamia usługę. Używane są dwie Intencje, jedna otrzymana przez BroadcastReceiver i jedna przez Usługę. Wydaje się, że jest to bardziej skomplikowane, dlaczego nie wystarczy, że usługa otrzyma intencję od AlamManager?Usługa budzenia bezpośrednio z programu AlarmManager

Rozumiem, że telefon nie może zasnąć podczas wykonywania funkcji onReceive(), tj. Jest opakowany za pomocą blokady wybudzania. Nie jestem pewien, czy klasa serwisowa oferuje podobne gwarancje.

Czy można uruchomić usługę bezpośrednio z Alarmu, gwarantując jednocześnie, że telefon zostanie obudzony ze stanu uśpienia i nie będzie w stanie uśpienia, dopóki nie można uzyskać blokady wybudzania?

Odpowiedz

14

Wydaje się to być bardziej skomplikowane, niż być może, po co usługa ma otrzymywać intencję z AlamManager?

Ponieważ Android nie gwarantuje, że urządzenie będzie spać wystarczająco długo na getService()PendingIntent się powoływać. Gwarancją jest tylko dla getBroadcast()PendingIntent - Android zapewnia, że ​​urządzenie pozostanie na jawie (przez WakeLock) przez czas trwania połączenia onReceive().

Zaufaj mi, szkoda, że ​​nie możemy tego pominąć.

+0

OK, dzięki za odpowiedź – alexbirkett

+0

oh, to świetnie - zastanawiałem się nad tym samym - najwyraźniej [w prostym przykładzie alarmu z próbek API to nie jest problem] (http://stackoverflow.com/a/ 14094314/281545) - czy coś mi brakuje? –

+1

@Mr_and_Mrs_D: Ten przykład ma tak wiele problemów, nawet nie jest zabawny. Pewnego dnia zagram problem, miejmy nadzieję, że zostanie zmieniony. – CommonsWare

Powiązane problemy