Zamrażarka aplikacji w pamięci podręcznej

Android 11 QPR3 lub nowszy obsługuje zamrażarkę aplikacji zapisanych w pamięci podręcznej. Ta funkcja zatrzymuje wykonywanie procesów buforowanych i zmniejsza wykorzystanie zasobów w wyniku nieprawidłowego działania aplikacji, które mogą próbować działać w pamięci podręcznej. Framework zamraża aplikacje zapisane w pamięci podręcznej, migrując ich procesy do zamrożonej grupy cgroup; zmniejsza to zużycie procesora podczas aktywnego i bezczynnego działania w obecności aktywnych aplikacji buforowanych. Zamrażarkę aplikacji można włączyć za pomocą flagi konfiguracji systemu lub opcji programisty.

Zaimplementuj zamrażarkę aplikacji

Zamrażarka aplikacji w pamięci podręcznej wykorzystuje zamrażarkę jądra cgroup v2. Urządzenia dostarczane z kompatybilnym jądrem mogą (opcjonalnie) to włączyć. Aby to zrobić, włącz opcję programisty „Wstrzymaj wykonywanie aplikacji buforowanych” 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 jest ustawiona na false lub opcja programistyczna jest wyłączona. Możesz przełączyć to ustawienie, zmieniając konfigurację urządzenia w wersji lub aktualizacji oprogramowania.

Zamrażarka aplikacji nie udostępnia oficjalnych interfejsów API (i nie ma referencyjnego klienta implementacji), ale korzysta z ukrytych systemowych interfejsów API setProcessFrozen i enableFreezer . Szczegółowe informacje na temat tych interfejsów API można znaleźć w Process.java i API ActivityManagerService programu ActivityManager. Programiści mogą również odwoływać się do kodu klienta w ActivityManager w celu przeprowadzenia eksperymentów.

Obsługuj funkcje niestandardowe

Zwykle nie oczekuje się, że procesy będą wykonywać jakąkolwiek pracę po buforowaniu, ale niektóre aplikacje mogą mieć niestandardowe funkcje obsługiwane przez procesy, które mają 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 zostają zablokowane i mogą uniemożliwić działanie funkcji niestandardowych.

Aby obejść ten problem, jeśli aplikacja zawiera proces, który musi wykonywać działania w pamięci podręcznej, zmień status procesu na niezapisany w pamięci podręcznej (taki jak Bound ForeGround Service (BFGS) lub pierwszy plan), zanim proces będzie musiał wykonać jakąkolwiek pracę, aby umożliwić aplikacji pozostać aktywnym.

Przetestuj zamrażarkę aplikacji

Aby sprawdzić, czy zamrażarka aplikacji działa zgodnie z przeznaczeniem, skorzystaj z następujących zasobów:

  • Sprawdź listę zamrożonych procesów za pomocą polecenia adb shell dumpsys activity i grep słowa kluczowego Frozen .

  • Sprawdź obecność pliku /sys/fs/cgroup/uid_0/cgroup.freeze .

  • Wyświetl logcat, który pokazuje zamrożone i niezamrożone wpisy za każdym razem, gdy proces migruje do lub z zamrażarki. Na przykład:

    adb logcat | grep -i "\(freezing\|froze\)"