Android 11 QPR3 lub nowszy obsługuje zamrażanie aplikacji w pamięci podręcznej. Ta funkcja zatrzymuje wykonywanie procesów z pamięci podręcznej i ogranicza zużycie zasobów przez nieprawidłowo działające aplikacje, które mogą próbować działać w pamięci podręcznej. Platforma wstrzymuje aplikacje w pamięci podręcznej, przenosząc ich procesy do wstrzymanej grupy cgroup. Zmniejsza to zużycie procesora w stanie aktywnym i bezczynnym w przypadku aktywnych aplikacji w pamięci podręcznej. Zamrażanie aplikacji można włączyć za pomocą flagi konfiguracji systemu lub opcji dewelopera.
Wdrażanie zamrażarki aplikacji
Funkcja zamrażania aplikacji w pamięci podręcznej korzysta z zamrażarki cgroup v2 jądra. Urządzenia dostarczane ze zgodnym jądrem mogą (opcjonalnie) włączyć tę funkcję. Aby to zrobić, włącz opcję programisty „Wstrzymaj wykonywanie w przypadku aplikacji w pamięci podręcznej” lub ustaw flagę konfiguracji urządzenia activity_manager_native_boot use_freezer
na true
. Na przykład:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
Zamrażanie jest wyłączone, gdy flaga use_freezer
ma wartość false lub opcja programisty jest wyłączona. To ustawienie możesz włączyć lub wyłączyć, zmieniając konfigurację urządzenia w wersji lub aktualizacji oprogramowania.
Zamrażarka aplikacji nie udostępnia oficjalnych interfejsów API (i nie ma klienta implementacji referencyjnej), ale korzysta z ukrytych interfejsów API systemu setProcessFrozen
i enableFreezer
. Szczegółowe informacje o tych interfejsach API znajdziesz w sekcji ActivityManager's
Process.java
i w interfejsie ActivityManagerService API. Programiści mogą też korzystać z kodu klienta w ActivityManager
na potrzeby eksperymentów.
Obsługa funkcji niestandardowych
Zwykle procesy nie powinny wykonywać żadnych działań, gdy są przechowywane w pamięci podręcznej, ale niektóre aplikacje mogą mieć funkcje niestandardowe obsługiwane przez procesy, które powinny działać, gdy są przechowywane w pamięci podręcznej. Gdy na urządzeniu z taką aplikacją włączona jest zamrażarka aplikacji, procesy w pamięci podręcznej są zamrażane i mogą uniemożliwiać działanie funkcji niestandardowych.
Jeśli aplikacja ma proces, który musi wykonywać działania w pamięci podręcznej, zmień stan procesu na niebuforowany (np. powiązana usługa na pierwszym planie lub usługa na pierwszym planie), zanim proces będzie musiał wykonać jakąkolwiek pracę, aby aplikacja pozostała aktywna.
Testowanie zamrażarki aplikacji
Aby sprawdzić, czy zamrażarka aplikacji działa zgodnie z oczekiwaniami, skorzystaj z tych materiałów:
Sprawdź listę zamrożonych procesów za pomocą polecenia
adb shell dumpsys activity
i wyszukajApps frozen:
.Sprawdź, czy plik
/sys/fs/cgroup/uid_0/cgroup.freeze
jest obecny.Wyświetl logcat, który pokazuje zamrożone i odmrożone wpisy za każdym razem, gdy proces jest przenoszony do zamrażarki lub z niej. Na przykład:
adb logcat | grep -i "\(freezing\|froze\)"