Zasady stałego połączenia z systemem Android

Testowałem niestandardowe rozwiązanie powiadomień wypychanych na urządzeniach z systemem Android z wykorzystaniem trwałych gniazd. Chciałbym podzielić się swoimi odkryciami i zatwierdzić wyniki.

Prosty opis
Aplikacje uruchamiają usługę pierwszoplanową i nawiązują połączenie z serwerem i utrzymują to połączenie za pomocą agresywnego pingowania (w odstępie 10 sekund). Jeśli połączenie zostanie wykryte jako martwe, aplikacja będzie próbowała ponownie połączyć się w nieskończoność. Serwer wysyła powiadomienia przez kanał dupleksowy.

Test 1:

Pinging is done using a timer at 10 second intervals.
Server sends notification every minute.
Applications acquires wifi and wake locks.
Duration : 8 hours
Battery loss : ~14%

Test 2:

Pinging is done using AlarmManager at 10 second intervals.
Server sends notification every minute.
Application acquires only a wifilock
Duration : 8 hours
Battery loss : ~7%

Założenia: Przychodzący pakiet sieciowy automatycznie budzi procesor, więc nie ma potrzeby blokowania budzenia. Używanie AlarmManager do ping (zamiast timerów) oznacza, że ​​nie potrzebujemy wakelocka.

Usunięcie tego wakelocka naprawdę pomogło akumulatorowi. Co zaskakujące, agresywne pingowanie na jednym z rozwiązań nie wpłynęło na żywotność baterii tak bardzo, jak bym się spodziewał. (Przeprowadziliśmy wiele innych testów, w tym jeden, w którym aplikacja po prostu trzymała wifilock i nie zrobiła nic, co spowodowałoby około 4–5% strat baterii w tym samym okresie)

Ponieważ aplikacja była w stanie pomyślnie wysłać wszystkie żądania ping i odebrać wszystkie przychodzące wiadomości, uważam, że moje założenia są poprawne. Ale chciałbym uzyskać potwierdzenie od wszystkich ekspertów.

Jeszcze jedno pytanie: Jeśli aplikacja miała zamiast tego nasłuchiwać połączeń przychodzących. W tym przypadku musiałbym trzymać wakelocka, prawda? Połączenie przychodzące nie budzi procesora? Nie idziemy tą drogą, ale chcieliśmy tylko potwierdzić.

Ponadto, nie zalecamy GCM, zostało to wykluczone przez politykę firmy.

Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion