Urządzenie z Androidem, które jest bezczynne, szybko się wyczerpuje, aby uniknąć wyczerpania baterii spać. Jednak czasami zdarza się, że aplikacja musi wybudzić ekran. lub procesora i nie usypiać, aby wykonać jakieś zadanie.
Wybór metody zależy od potrzeb aplikacji. Zgodnie z ogólną zasadą jest zalecenie, aby zastosować najprostszą metodę aplikacji, aby zminimalizować jej wpływ na zasoby systemowe. W poniższych sekcjach opisać, jak postępować w przypadkach, w których domyślny sposób usypiania urządzenia jest niezgodne z wymaganiami Twojej aplikacji.
Alternatywy dla blokad uśpienia
Zanim dodasz do swojej aplikacji obsługę blokady uśpienia, zastanów się, czy nie są dostępne w przypadku jednego z tych rozwiązań alternatywnych:
Jeśli Twoja aplikacja długo trwa pobieranie plików przez HTTP, rozważ użycie
DownloadManager
Jeśli Twoja aplikacja synchronizuje dane z serwera zewnętrznego, rozważ utworzenie adapter synchronizacji.
Jeśli aplikacja wymaga usług w tle, rozważ zastosowanie JobScheduler lub Komunikacja w chmurze Firebase w określonych odstępach czasu.
Jeśli chcesz, aby aplikacja towarzysząca działała zawsze, gdy jest używane urządzenie towarzyszące w zasięgu, użyj Menedżera urządzeń towarzyszących.
Nie wyłączaj ekranu
Niektóre aplikacje, na przykład gry lub filmy, muszą mieć włączony ekran.
aby to zrobić, użyj
FLAG_KEEP_SCREEN_ON
w Twojej aktywności (i tylko w trakcie jej aktywności, nigdy w usłudze czy innej aplikacji)
). Na przykład:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
Zaletą tego podejścia jest to, że w przeciwieństwie do blokad uśpienia (omówione w sekcji Ustawianie CPU On), nie wymaga specjalnych uprawnień, a platforma poprawnie zarządza użytkownikiem przenoszonym między aplikacjami, a aplikacja nie potrzebuje i martwić się zwalnianiem nieużywanych zasobów.
Innym sposobem implementacji tego rozwiązania jest plik XML układu aplikacji – za pomocą metody
atrybut android:keepScreenOn
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Użycie android:keepScreenOn="true"
jest równoważne z używaniem
FLAG_KEEP_SCREEN_ON
Możesz zastosować metodę, która najbardziej odpowiada Twojej aplikacji. Zaletą konfiguracji
oznacza to, że możesz automatycznie
programowo usuwając flagę później i umożliwiając odwrócenie ekranu.
wyłączone.
Tryb nieaktywny na telewizorze
W telewizji
FLAG_KEEP_SCREEN_ON
powinien być używany, by urządzenie nie przechodziło
Tryb nieaktywny
podczas odtwarzania filmu. Gdy zasada FLAG_KEEP_SCREEN_ON
jest nieskonfigurowana
na podstawie aktywności na pierwszym planie, urządzenie automatycznie włączy Tryb nieaktywny
po okresie braku aktywności.
Nie wyłączaj procesora
Jeśli procesor musi pozostawać uruchomiony w celu wykonania pewnych działań przed
urządzenie przejdzie w tryb uśpienia, możesz użyć
funkcja usługi systemowej PowerManager
blokad uśpienia. Blokady uśpienia pozwalają aplikacji kontrolować stan zasilania
na urządzeniu hostującym.
Tworzenie i przytrzymywanie blokad uśpienia może mieć ogromny wpływ na system
żywotności baterii. Z tego powodu blokad uśpienia należy używać tylko wtedy, gdy jest to konieczne.
i przytrzymaj je jak najkrócej. Na przykład:
używać blokady uśpienia w trakcie aktywności. Jak opisano powyżej, jeśli chcesz zachować atrybut
włącz ekran w swojej aktywności, użyj
FLAG_KEEP_SCREEN_ON
Jednym z prawidłowych przypadków użycia blokady uśpienia może być usługa w tle, która musi ustawić blokadę uśpienia, aby procesor mógł działać, gdy ekran jest włączony wyłączone. Trzeba jednak ograniczyć tę praktykę, ponieważ ma ona wpływ żywotności baterii.
Aby używać blokady uśpienia, najpierw dodaj
WAKE_LOCK
:
plik manifestu aplikacji:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Jeśli Twoja aplikacja ma odbiornik, który używa usługi do wykonywania zadań, Oto jak ustawić blokadę uśpienia bezpośrednio:
Kotlin
val wakeLock: PowerManager.WakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply { acquire() } }
Java
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag"); wakeLock.acquire();
Aby usunąć blokadę uśpienia, zadzwoń pod numer
wakelock.release()
Spowoduje to zwolnienie Twojego prawa do procesora. Ważne jest, by wyłączyć blokadę uśpienia,
zaraz po zakończeniu korzystania z aplikacji przez aplikację, aby uniknąć rozładowywania baterii.