앱 최대 절전 모드

평균적인 Android 사용자는 기기에 앱을 50개 이상 설치합니다. 기기의 RAM 수준이 증가하면 앱 수가 증가합니다. 그러나 이러한 앱 중 상당수는 사용자가 오랫동안 사용하지 않습니다.

앱 최대 절전 모드는 권한 자동 취소와 비슷하게 사용자가 몇 개월 동안 사용하지 않는 앱을 최대 절전 모드로 전환합니다. 그러면 앱이 강제 종료되고 성능이 아닌 저장용량에 최적화된 상태가 됩니다. 권한 자동 취소도 이 상태와 함께 번들로 묶이며 설정에서 동일한 예외 설정을 공유합니다. 강제 종료된 앱은 작업이나 알림을 백그라운드에서 실행하지 않으며 푸시 알림을 보낼 수 없습니다. 사용자가 앱을 다시 사용하면 앱이 최대 절전 모드를 종료하고 평소처럼 작업/알림을 다시 실행합니다. 앱이 최대 절전 모드로 전환되기 전에 예약된 모든 작업/알림의 일정을 변경해야 합니다.

플랫폼을 수정하는 OEM은 앱 최대 절전 모드 구현과 충돌할 수도 있습니다. 예:

  • 앱 사용 정의를 수정하거나 AOSP에 없는 앱을 절전 모드에서 해제하는 방법을 도입하면 앱 최대 절전 모드의 정확성이 낮아질 수 있습니다.
  • 앱 최대 절전 모드와 유사한 OEM의 독점적인 제한 메커니즘도 유사한 목적을 달성할 수 있습니다. 두 기능 모두 존재할 수 있지만 일부 겹치는 부분이 있을 수도 있습니다.

CDD는 기존의 3.5.1 요구사항과 유사하게 앱 사용에 기반한 변경에 관한 새로운 요구사항을 설명합니다. 앱 최대 절전 모드는 이 요구사항을 따릅니다.

프레임워크 코드는 다음 위치에 있습니다.

정책 로직은 다음 위치에 있습니다.

  • 저장소: platform/packages/modules/Permission
  • 디렉터리: PermissionController/src/com/android/permissioncontroller/hibernation

상위 수준 아키텍처

앱 최대 절전 시스템 서비스는 사용자가 자주 사용하지 않는 앱을 최적화하여 저장용량을 확보하고 이러한 앱이 백그라운드에서 실행되지 않도록 합니다. 이러한 결과를 얻으려면 앱을 최대 절전 모드로 전환할 때 특히 다음과 같이 합니다.

  • 권한 자동 취소
  • 앱 강제 종료
  • ODEX 및 VDEX 파일 삭제
  • 앱 캐시 삭제

Google의 목표는 앱 데이터를 그대로 유지하고 사용자가 런처 및 다른 영역을 통해 여전히 앱을 사용할 수 있도록 최대 절전 모드를 되돌릴 수 있는 작업으로 구현하는 것입니다. 앱을 실행하면 앱이 강제 종료 상태에서 다시 복원되고 평소처럼 ODEX 및 VDEX 파일 생성이 계속됩니다.

계획된 설계는 두 가지 주요 부분을 중심으로 합니다.

  • 패키지를 최대 절전 모드로 전환하는 시기 결정
  • 최대 절전 모드 패키지 최적화

PermissionController의 새로운 시스템 서비스인 AppHibernationService와 작업 서비스인 AppHibernationJobService,는 전반적인 의사 결정과 로직을 제어하는 결합입니다.

패키지를 최대 절전 모드로 전환할 시기를 결정하는 것은 주로 UsageStatsService로 구동되고 PermissionController에서 AppHibernationJobService로 관리됩니다. 이 정책 로직은 PermissionController에 있으며 Mainline을 통해 동적으로 업데이트할 수 있습니다. 또한 Google은 패키지의 구성요소(예: 서비스, 콘텐츠 제공업체)의 사용량을 UsageStatsService의 새 측정항목으로 캡처하도록 새로운 신호인 구성요소 사용을 추가할 계획입니다.

패키지 최적화는 실제로 모든 절감/최적화가 발생하는 부분입니다. AppHibernationService는 시스템의 다양한 부분과 통신하여 패키지를 중지하고 캐시 데이터를 삭제하며 ART 아티팩트를 삭제하는 등의 작업을 합니다. 권한 취소는 Android 11 이하 기기에서 자동 취소 기능을 유지하기 위해 AppHibernationJobService에서 바로 시작됩니다.

사용자 환경

최대 절전 모드로 전환할 수 있는 앱에 관한 정보와 제어가 모두 사용자에게 제공됩니다.

자동 취소와 마찬가지로 사용자는 최대 절전 모드인 앱에 관한 알림을 받으며, 알림에서 곧바로 설정으로 이동하여 앱을 열고 최대 절전 모드를 해제하거나 필요 시 미사용 앱을 삭제할 수 있습니다.

Google에서는 기존의 권한 자동 취소 예외 인텐트를 통해 사용자에게 최대 절전 모드 예외를 요청하려는 개발자의 의도를 계속 지원하고 있습니다.

이전 버전과의 호환성

최대 절전 모드 관련 기능은 Android 12부터 사용할 수 있습니다. 이전 버전에서는 플랫폼 구성요소(예: 새 시스템 서비스)가 없기 때문에 이러한 기능이 작동할 수 없습니다. 자동 취소는 현재 이전 OS 버전에서 구현된 대로 계속 작동합니다.

Android 12부터는 이전 버전과의 호환성을 보장하기 위해 원래 자동 취소 전환 버튼을 권한 하위 메뉴 내에 유지하는 동시에 앱의 페이지에서 설정앱 및 알림 아래에 최대 절전 모드 전환 버튼을 추가했습니다. 이 전환 버튼은 앱의 전반적인 앱 최대 절전 시스템 예외를 제어합니다.

맞춤설정

일부 구현은 모듈식 시스템 구성요소의 일부이므로 파트너가 기능을 수정하지 않는 것이 좋습니다. 대신 파트너는 CDD 요구사항을 준수한다면 유사한 기능을 구현할 수 있습니다.

Android 11 이상을 타겟팅하는 모든 앱에서 앱 최대 절전 모드는 기본적으로 켜져 있어야 합니다. 이는 권한 자동 취소와 동일합니다. 설정 자체가 켜져 있더라도 앱 최대 절전 모드 구현은 Android 11을 타겟팅하는 앱과 Android 12를 타겟팅하는 앱 간에 다를 수 있습니다. 구체적으로 앱 최대 절전 모드는 Android 11을 타겟팅하는 앱에서만 작동하는 반면 Android 12를 타겟팅하는 앱의 경우에는 기본적으로 자동 취소가 적용됩니다.

또한 OEM이 유사한 기능을 구현할 수도 있습니다. 그러나 이러한 기능은 OEM별로 다를 수 있는 배터리 최적화를 위해 훨씬 더 짧은 기간으로 타겟팅됩니다. OEM이 개발한 유사한 앱 제한 기능은 CDD에 정의된 기존의 기준을 충족한다면 앱 최대 절전 시스템과 공존할 수 있습니다.

테스트

앱 최대 절전 모드가 올바르게 작동하는지 확인하기 위한 CTS와 단위 테스트가 있습니다.