Nie usypiaj urządzenia

Gdy użytkownik nie używa urządzenia z Androidem, urządzenie to szybko przechodzi w stan zawieszenia, aby nie wyczerpywać baterii. Czasami jednak aplikacja musi uniemożliwić procesorowi przejście 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 musi mieć aktywny procesor.

Wybór podejścia zależy od potrzeb aplikacji. Ogólna zasada jest taka, że należy stosować jak najmniejsze podejście, aby zminimalizować wpływ aplikacji na zasoby systemowe. Z tego dokumentu dowiesz się, jak wybrać odpowiednią technologię Androida do danej sytuacji.

Wybór odpowiedniej technologii

Najlepsza opcja utrzymywania urządzenia w stanie czuwania zależy od potrzeb aplikacji. Ten oddział pomoże Ci wybrać właściwe podejście.

Schemat przepływu podsumowujący, jak wybrać właściwe podejście do utrzymywania aktywności urządzenia. Treść schematu blokowego została rozwinięta w dalszej części tego tekstu.

  • Czy aplikacja musi mieć włączony ekran?
    • Jeśli odpowiedź brzmi Tak, zapoznaj się z artykułem Utrzymywanie ekranu włączonego. Może istnieć interfejs API do specjalnych celów, który spełnia Twoje wymagania. Jeśli na przykład wdrażasz interfejs użytkownika połączeń telefonicznych, możesz użyć ramy telekomunikacyjnej Androida, która w razie potrzeby utrzymuje ekran w stanie włączonym. Jeśli w Twoim przypadku nie ma interfejsu API do specjalnego celu, możesz użyć interfejsu keepScreenOnAPI.
  • Czy aplikacja uruchamia usługę na pierwszym planie i musisz utrzymać urządzenie w stanie czuwania, gdy ekran jest wyłączony?
    • Jeśli odpowiedź brzmi Nie, nie musisz utrzymywać urządzenia w stanie czuwania. Jeśli użytkownik aktywnie korzysta z aplikacji, urządzenie pozostanie aktywne. Jeśli użytkownik nie wchodzi w interakcję z Twoją aplikacją i nie działa usługa na pierwszym planie, w razie potrzeby urządzenie powinno przejść w tryb zawieszenia. Jeśli chcesz tylko wykonać jakąś czynność, gdy użytkownik nie korzysta z aplikacji, zapoznaj się z dokumentacją dotyczącą zadań w tle, aby znaleźć najlepszą opcję.
    • Jeśli odpowiedź brzmi Tak, najpierw sprawdź, czy rzeczywiście musisz korzystać z usługi na pierwszym planie. W zależności od sytuacji możesz użyć interfejsu API do specjalnego celu zamiast usługi na pierwszym planie. Informacje na ten temat znajdziesz w dokumentacji dotyczącej usług na pierwszym planie. Jeśli na przykład chcesz śledzić lokalizację użytkownika, zamiast usługi na pierwszym planie location możesz użyć interfejsu Geofencing API.
  • Czy wrażenia użytkownika pogorszy zawieszenie urządzenia, gdy uruchomiona jest usługa na pierwszym planie, a ekran jest wyłączony? Jeśli na przykład używasz usługi na pierwszym planie do aktualizowania powiadomień, nie będzie to dla użytkownika problemem, jeśli urządzenie jest zawieszone.
    • Jeśli odpowiedź brzmi Nie, nie używaj wakelocka. Działanie zostanie wznowione automatycznie, gdy użytkownik wejdzie w interakcję z urządzeniem, co spowoduje jego odwieszenie.
    • Jeśli odpowiedź brzmi Tak, konieczne może być użycie blokady aktywacji. Mimo to warto sprawdzić, czy nie używasz już interfejsu API lub nie wykonujesz czynności, które powodują zablokowanie urządzenia w Twoim imieniu, jak opisano w artykule Działania, które powodują, że urządzenie pozostaje aktywne.

Działania, które powodują, że ekran pozostaje włączony

Jeśli Twoja aplikacja wykonuje którąś z tych czynności, nie musisz samodzielnie ustawiać blokady aktywacji. Poniższe działania i interfejsy API utrzymują urządzenie w stanie czuwania.

  • Jeśli odtwarzasz dźwięk, system audio skonfiguruje blokadę aktywacji i będzie nią zarządzać. Nie musisz tego robić samodzielnie.
  • Jeśli używasz interfejsów API lub bibliotek do planowania zadań, takich jak WorkManager, JobScheduler lub DownloadManager, system lub biblioteka uzyskuje blokadę uśpienia w Twoim imieniu.
  • Jeśli używasz Media3 ExoPlayer, możesz użyć funkcji ExoPlayer.setWakeMode(), aby odtwarzacz uruchomił blokadę aktywacji.
  • Niektóre czujniki urządzenia są czujnikami wybudzania. Możesz użyć SensorManager, aby te czujniki wybudzały urządzenie, gdy mają dane do przekazania. Aby sprawdzić, czy czujnik jest czujnikiem wybudzenia, zadzwoń pod numer Sensor.isWakeUpSensor.

Zobacz również