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 ogranicza 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; zmniejsza to aktywne i pozostawanie 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
Funkcja zamrażania jest wyłączona, gdy flaga use_freezer
ma wartość Fałsz lub opcja dla programistów 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. Programiści mogą też korzystać z kodu klienta w pliku ActivityManager
, aby przeprowadzać eksperymenty.
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. Bound ForeGround Service (BFGS) lub pierwszy plan), zanim proces będzie musiał wykonać jakąkolwiek pracę, aby aplikacja mogła pozostać aktywna.
Testowanie funkcji zamrażania aplikacji
Aby sprawdzić, czy zamrażarka aplikacji działa zgodnie z oczekiwaniami, skorzystaj z tych materiałów:
Uzyskaj listę zablokowanych procesów za pomocą polecenia
adb shell dumpsys activity
i grep dlaApps frozen:
.Sprawdź, czy istnieje plik
/sys/fs/cgroup/uid_0/cgroup.freeze
.Wyświetlać 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\)"