Android 11 QPR3 이상은 캐시된 앱 고정기를 지원합니다. 이 기능은 캐시된 프로세스의 실행을 중지하고 캐시된 상태에서 작업을 시도할 수 있는 오작동하는 앱에 의한 리소스 사용량을 줄입니다. 프레임워크는 프로세스를 고정된 cgroup으로 마이그레이션하여 캐시된 앱을 고정합니다. 이렇게 하면 캐시된 활성 앱이 있을 때 활성 및 유휴 CPU 사용량이 줄어듭니다. 앱 고정기는 시스템 구성 플래그나 개발자 옵션으로 사용 설정할 수 있습니다.
앱 고정기 구현
캐시된 앱 고정기는 커널 cgroup v2 고정기를 사용합니다. 호환되는 커널과 함께 제공되는 기기는 선택적으로 캐시된 앱 고정기를 사용 설정할 수 있습니다. 이렇게 하려면 개발자 옵션 '캐시된 앱 실행 정지'를 사용 설정하거나 기기 설정 플래그 activity_manager_native_boot use_freezer
를 true
로 설정합니다. 예:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
플래그 use_freezer
가 false로 설정되거나 개발자 옵션이 사용 중지되면 고정기가 사용 중지됩니다. 소프트웨어 출시 또는 업데이트에서 기기 설정을 변경하여 이 설정을 전환할 수 있습니다.
앱 고정기는 공식 API를 노출하지 않고 참조 구현 클라이언트가 없으나 숨겨진 시스템 API setProcessFrozen
및 enableFreezer
를 사용합니다. 이러한 API에 관한 자세한 내용은 ActivityManager의 Process.java
및 ActivityManagerService API를 참고하세요. 개발자는 ActivityManager
의 클라이언트 코드에서 실험을 참고할 수도 있습니다.
맞춤 기능 처리
일반적으로 캐시된 프로세스는 어떠한 작업도 하지 않을 것으로 예상되지만, 일부 앱에는 캐시된 동안 실행될 것으로 예상되는 프로세스가 지원하는 맞춤 기능이 있을 수 있습니다. 이러한 앱을 실행하는 기기에서 앱 고정기가 사용 설정되면 캐시된 프로세스가 멈추고 맞춤 기능이 작동하지 않을 수 있습니다.
앱에 캐시된 동안 활동을 실행해야 하는 프로세스가 있는 경우 앱이 활성 상태로 유지되도록 프로세스가 작업을 처리해야 하기 전에 프로세스 상태를 캐시되지 않음(예: Bound ForeGround Service(BFGS) 또는 포그라운드)으로 변경하는 방법을 사용할 수 있습니다.
앱 고정기 테스트
앱 고정기가 의도대로 작동하는지 확인하려면 다음 리소스를 사용하세요.
adb shell dumpsys activity
명령어를 사용하여 고정된 프로세스 목록을 확인하고 grep 명령어를 사용하여Frozen
키워드를 검색합니다./sys/fs/cgroup/uid_0/cgroup.freeze
파일이 있는지 확인합니다.프로세스가 고정기 내부 또는 외부로 이전될 때마다 고정된/고정 해제된 항목을 보여주는 logcat을 확인합니다. 예:
adb logcat | grep -i "\(freezing\|froze\)"