Android 11 QPR3 lub nowszy obsługuje funkcję zamrażania aplikacji w pamięci podręcznej. Ta funkcja przerywa wykonywanie procesów z pamięci podręcznej i zmniejsza wykorzystanie zasobów przez nieprawidłowo działające aplikacje, które mogą próbować działać w pamięci podręcznej. Framework zamraża aplikacje w pamięci podręcznej, przenosząc ich procesy do zamrożonego cgroup. Dzięki temu zmniejsza się aktywne i pozostałe wykorzystanie procesora w przypadku aktywnych aplikacji w pamięci podręcznej. Funkcję zamrażania aplikacji można włączyć za pomocą flagi konfiguracji systemu lub opcji dewelopera.
Wdrożenie zamrażarki aplikacji
Zamrażanie aplikacji w pamięci podręcznej korzysta z zamrażania cgroup v2 w jądrze. Urządzenia z kompatybilnym jądrem mogą (opcjonalnie) włączyć tę funkcję. Aby to zrobić, włącz opcję dla programistów „Wstrzymaj wykonywanie 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żarka jest wyłączona, gdy flaga use_freezer
ma wartość Fałsz lub opcja programisty jest wyłączona. Możesz zmienić to ustawienie, zmieniając konfigurację urządzenia w ramach wydania lub aktualizacji oprogramowania.
Aplikacja apps freezer nie udostępnia oficjalnych interfejsów API (nie ma też referencyjnego klienta implementacji), ale korzysta z ukrytych interfejsów API setProcessFrozen
i enableFreezer
. Szczegółowe informacje o tych interfejsach API znajdziesz w interfejsie ActivityManagerProcess.java
i interfejsie ActivityManagerService API. Deweloperzy mogą też korzystać z kodu klienta w pliku ActivityManager
na potrzeby eksperymentów.
Obsługa funkcji niestandardowych
Zazwyczaj procesy nie powinny wykonywać żadnych działań w pamięci podręcznej, ale niektóre aplikacje mogą mieć funkcje niestandardowe obsługiwane przez procesy, które powinny działać w pamięci podręcznej. Gdy na urządzeniu z taką aplikacją włączona jest funkcja zamrażania aplikacji, procesy w pamięci podręcznej są zamrażane i mogą uniemożliwić działanie funkcji niestandardowych.
Jeśli aplikacja ma proces, który musi wykonywać czynności podczas buforowania, jako obejście zmień stan procesu na niebuforowany (np. ograniczony w tle lub na pierwszym planie), zanim proces będzie musiał wykonać jakąkolwiek pracę, aby aplikacja mogła pozostać aktywna.
Testowanie zamrażarki aplikacji
Aby sprawdzić, czy zamrażarka aplikacji działa zgodnie z oczekiwaniami, skorzystaj z tych materiałów:
Sprawdź listę zablokowanych procesów, używając polecenia
adb shell dumpsys activity
i grepApps frozen:
.Sprawdź, czy jest dostępny plik
/sys/fs/cgroup/uid_0/cgroup.freeze
.Wyświetlanie logcat, który pokazuje wpisy zamrożone i odmrożone za każdym razem, gdy proces przechodzi do lub z zamrażarki. Na przykład:
adb logcat | grep -i "\(freezing\|froze\)"