Pamięć podręczna aplikacji

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