Zamrażarka aplikacji w pamięci podręcznej

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 setProcessFrozenenableFreezer. 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 grep Apps 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\)"