Gdy użytkownik nie korzysta z urządzenia z Androidem, szybko przechodzi ono w stan zawieszenia, aby uniknąć rozładowania baterii. Czasami jednak aplikacja musi uniemożliwić przejście procesora w stan zawieszenia. W niektórych przypadkach aplikacja może wymagać włączonego ekranu podczas działania. W innych przypadkach aplikacja nie musi utrzymywać włączonego ekranu, ale nadal potrzebuje aktywnego procesora.
Podejście, które zastosujesz, zależy od potrzeb aplikacji. Ogólna zasada jest jednak taka, że należy używać jak najlżejszego podejścia, aby zminimalizować wpływ aplikacji na zasoby systemowe. Ten dokument pomoże Ci wybrać odpowiednią technologię Androida w Twojej sytuacji.
Wybór odpowiedniej technologii
Najlepsza opcja utrzymania urządzenia w stanie aktywności zależy od potrzeb aplikacji. Ta sekcja pomoże Ci wybrać odpowiednie podejście.
- Czy aplikacja musi utrzymywać włączony ekran?
- Jeśli Tak, zapoznaj się z sekcją Włączanie ekranu. Może istnieć interfejs API specjalnego przeznaczenia, który spełnia Twoje potrzeby. Jeśli na przykład implementujesz interfejs połączeń telefonicznych, możesz użyć platformy telekomunikacyjnej Androida, która w razie potrzeby utrzymuje ekran włączony. Jeśli w Twojej sytuacji nie ma interfejsu API specjalnego przeznaczenia, możesz użyć
keepScreenOn
interfejsu API.
- Jeśli Tak, zapoznaj się z sekcją Włączanie ekranu. Może istnieć interfejs API specjalnego przeznaczenia, który spełnia Twoje potrzeby. Jeśli na przykład implementujesz interfejs połączeń telefonicznych, możesz użyć platformy telekomunikacyjnej Androida, która w razie potrzeby utrzymuje ekran włączony. Jeśli w Twojej sytuacji nie ma interfejsu API specjalnego przeznaczenia, możesz użyć
- Czy aplikacja korzysta z usługi na pierwszym planie i musisz utrzymywać urządzenie w stanie aktywności, gdy ekran jest wyłączony, a usługa działa?
- Jeśli Nie, nie musisz utrzymywać urządzenia w stanie aktywności. Jeśli użytkownik aktywnie korzysta z aplikacji, urządzenie pozostanie włączone. Jeśli użytkownik nie korzysta z aplikacji, a usługa nie działa na pierwszym planie, w razie potrzeby należy przełączyć urządzenie w tryb zawieszenia. Jeśli chcesz tylko mieć pewność, że niektóre zadania zostaną wykonane, gdy użytkownik nie będzie korzystać z aplikacji, zapoznaj się z dokumentacją dotyczącą zadań w tle, aby znaleźć najlepszą opcję.
- Jeśli tak, najpierw sprawdź, czy naprawdę musisz używać usługi działającej na pierwszym planie. W zależności od sytuacji możesz użyć specjalnego interfejsu API zamiast usługi na pierwszym planie.
Informacje o nich znajdziesz w dokumentacji usługi na pierwszym planie. Jeśli na przykład musisz śledzić lokalizację użytkownika, możesz użyć interfejsu Geofencing API zamiast
location
usługi na pierwszym planie.
- Czy zawieszenie urządzenia, gdy usługa na pierwszym planie jest uruchomiona, a ekran urządzenia jest wyłączony, wpłynie negatywnie na wrażenia użytkownika? (Jeśli na przykład używasz usługi działającej na pierwszym planie do aktualizowania powiadomień, zawieszenie urządzenia nie wpłynie negatywnie na wrażenia użytkownika).
- Jeśli Nie, nie używaj blokady uśpienia. Działanie zostanie automatycznie wznowione, gdy użytkownik zacznie korzystać z urządzenia, co spowoduje wyjście z trybu zawieszenia.
- Jeśli tak, może być konieczne użycie blokady wybudzania. Warto jednak sprawdzić, czy nie używasz już interfejsu API lub nie wykonujesz działania, które deklaruje blokadę wybudzania w Twoim imieniu, zgodnie z opisem w sekcji Działania, które utrzymują urządzenie w stanie aktywności.
Działania, które nie pozwalają uśpić urządzenia
Jeśli Twoja aplikacja wykonuje którąś z tych czynności, nie musisz samodzielnie ustawiać blokady wybudzania. Poniższe działania i interfejsy API utrzymują urządzenie w stanie aktywności.
- Jeśli odtwarzasz dźwięk, system audio ustawia i zarządza blokadą wybudzania za Ciebie. Nie musisz tego robić samodzielnie.
- Jeśli używasz interfejsów API lub bibliotek do planowania zadań, takich jak WorkManager,
JobScheduler
lubDownloadManager
, system lub biblioteka uzyskuje blokadę uśpienia przypisaną do Twojej aplikacji. - Jeśli używasz Media3 ExoPlayera, możesz użyć
ExoPlayer.setWakeMode()
, aby odtwarzacz ustawił blokadę wybudzania. - Niektóre czujniki urządzenia to czujniki wybudzania. Możesz użyć
SensorManager
, aby te czujniki wybudzały urządzenie, gdy mają dane do przekazania. Aby sprawdzić, czy czujnik jest czujnikiem wybudzania, wywołaj funkcjęSensor.isWakeUpSensor
. - Jeśli zaplanujesz alarm, urządzenie wybudzi się, gdy alarm zadzwoni, nawet jeśli aplikacja nie będzie działać.