캐시된 앱 프리저

Android 11 QPR3 이상은 캐시된 앱 프리저를 지원합니다. 이 기능은 캐시된 프로세스의 실행을 중지하고 캐시된 동안 작동을 시도할 수 있는 앱을 오작동하여 리소스 사용량을 줄입니다. 프레임워크는 프로세스를 고정된 cgroup으로 마이그레이션하여 캐시된 앱을 고정합니다. 이렇게 하면 활성 캐시된 앱이 있는 경우 활성 및 유휴 CPU 소비가 줄어듭니다. 시스템 구성 플래그 또는 개발자 옵션을 사용하여 앱 프리저를 활성화할 수 있습니다.

앱 프리저 구현

캐시된 앱 프리저는 커널 cgroup v2 프리저를 활용합니다. 호환되는 커널과 함께 제공되는 장치는 선택적으로 이를 활성화할 수 있습니다. 이렇게 하려면 개발자 옵션 "캐시된 ​​앱에 대한 실행 일시 중단"을 활성화하거나 장치 구성 플래그 activity_manager_native_boot use_freezertrue 로 설정합니다. 예를 들어:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

use_freezer 플래그가 false로 설정되거나 개발자 옵션이 비활성화되면 냉동기가 비활성화됩니다. 소프트웨어 릴리스 또는 업데이트에서 장치 구성을 변경하여 이 설정을 토글할 수 있습니다.

앱 프리저는 공식 API를 노출하지 않고(참조 구현 클라이언트가 없음) 숨겨진 시스템 API인 setProcessFrozenenableFreezer 를 사용합니다. 이러한 API에 대한 자세한 내용은 ActivityManager의 Process.java 및 ActivityManagerService API를 참조하십시오. 개발자는 실험을 위해 ActivityManager 에서 클라이언트 코드를 참조할 수도 있습니다.

사용자 정의 기능 처리

일반적으로 프로세스는 캐시될 때 작업을 수행하지 않을 것으로 예상되지만 일부 앱에는 캐시된 동안 실행될 것으로 예상되는 프로세스에서 지원하는 사용자 지정 기능이 있을 수 있습니다. 이러한 앱을 실행하는 장치에서 앱 프리저가 활성화되면 캐시된 프로세스가 정지되고 사용자 지정 기능이 작동하지 않을 수 있습니다.

해결 방법으로 앱에 캐시된 동안 활동을 수행해야 하는 프로세스가 있는 경우 프로세스가 앱을 허용하는 작업을 수행해야 하기 전에 프로세스 상태를 비캐시(예: BFGS(Bound ForeGround Service) 또는 포그라운드)로 변경합니다. 활성 상태를 유지합니다.

앱 프리저 테스트

앱 프리저가 의도한 대로 작동하는지 확인하려면 다음 리소스를 사용하세요.

  • /dev/freezer/frozen/cgroup.procs 에서 캐시된 프로세스 목록을 확인하십시오.

  • /sys/fs/cgroup/uid_0/cgroup.freeze 파일이 있는지 확인합니다.

  • 프로세스가 Freezer 내부 또는 외부로 이동할 때마다 고정/비동결 항목을 표시하는 logcat을 봅니다. 예를 들어:

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