봄날은 갔다. 이제 그 정신으로 공부하자

Android 13 - 4편 (Battery Resource Utilization) 본문

학습

Android 13 - 4편 (Battery Resource Utilization)

길재의 그 정신으로 공부하자 2022. 7. 20. 11:11

Android 13(API 수준 33)에서는 아래와 같이 배터리 수명을 연장하는 규칙을 도입했습니다.

  • 시스템이 '제한됨' 앱 대기 버킷에 앱을 배치하는 경우에 적용되는 "규칙 업데이트". 플랫폼 API를 호출하여 앱이 속한 버킷을 확인할 수 있습니다.
  • 사용자가 앱의 백그라운드 배터리 사용을 '제한됨' 상태로 설정한 경우 앱이 실행할 수 있는 작업에 관한 새로운 제한사항
  • 장기 실행 포그라운드 서비스에 관해 사용자에게 경고하는 새로운 시스템 알림

 

앱이 'restricted' 앱 대기 버킷에 진입하는 경우에 적용되는 규칙 업데이트

앱이 예외 조건을 해당되지 않는 경우, 다음과 같은 동작 중 하나에 해당하면 시스템은 앱을 제한됨 버킷에 배치합니다.

  • 앱이 8일 동안 사용자와 상호작용이 없는 경우앱과 상호작용하지 않습니다. 단, 사용자가 앱의 서비스에 바인딩되는 다른 앱과 상호작용하는 경우, 시스템은 앱이 '사용된' 것으로 간주합니다.
  • 앱이 24시간 동안 과도한 개수의 브로드캐스트 또는 바인디을 호출하는 경우
  • (지원되는 기기만 해당) 앱이 24시간 동안 백그라운드에서 상당한 양의 기기 배터리를 소모합니다. 이 임계값은 기기에 따라 다르며 특히 RAM이 부족한 기기에서 다를 수 있습니다.
    앱이 기기의 배터리 수명에 미치는 영향을 측정할 때 시스템은 다음을 비롯해 앱이 여러 위치에서 실행하는 작업을 고려합니다.


앱이 "restricted" 버킷을 벗어나도록 하는 사용자 상호작용

사용자가 다음과 같은 방법을 포함하는 방법으로 앱과 상호작용하면 시스템은 앱을 "restricted" 버킷에서 꺼내서 다른 앱 "Standby" 버킷에 넣습니다.

  • 사용자가 앱이 보낸 알림을 탭하는 경우
  • 사용자가 앱에 속한 위젯에서 동작을 실행하는 경우
  • 사용자가 미디어 버튼을 누르는 경우
  • 앱이 Android Automotive OS와 상호작용하며 이 OS의 포그라운드 서비스 또는 CONNECTION_TYPE_PROJECTION을 사용하는 중에 사용자가 앱에 연결하는 경우
  • 앱을 PIP 모드로 보는 경우
  • 앱이 화면에 표시된 활성 앱 중 하나인 경우 (주로 대형화면 기기에서 볼 수 있는 현상)

 

백그라운드 배터리 사용에 관한 새로운 제한 사항

* 참고: 이 변경사항은 앱이 Android 13을 타겟팅한 경우에만 적용됩니다.

기존 버전의 Android에서는 앱이 백그라운드에서 실행되는 동안 실행할 수 있는 작업의 양을 사용자가 조정할 수 있습니다. 아래와 같은 옵션이 시스템 설정의 배터리 사용량 페이지에 표시됩니다.

  • Unrestricted: 백그라운드 작업이 허용됩니다. 이로 인해 배터리가 더 많이 소모될 수 있습니다.
  • Optimized(default): 사용자가 앱과 상호작용하는 방식에 따라 앱이 백그라운드 작업을 실행하는 기능이 최적화됩니다.
  • Restricted: 앱의 다양한 용도보다 기기의 배터리 수명이 우선시됩니다. 앱이 백그라운드에서 실행할 수 있는 작업에 더 많은 제한사항이 적용됩니다.

Android 9(API 수준 28)부터는 'restricted' 상태에 있는 앱에 다음과 같은 제한사항이 적용됩니다.

  • 포그라운드 서비스를 실행할 수 없습니다.
  • 기존 포그라운드 서비스가 포그라운드에서 삭제됩니다.
  • 알람이 트리거되지 않습니다.
  • 작업이 실행되지 않습니다.

앱이 Android 13을 타겟팅한 경우, 시스템은 앱이 다른 이유로 인해 시작될 때까지 다음과 같은 브로드캐스트를 전송하지 않습니다.

  • BOOT_COMPLETED
  • LOCKED_BOOT_COMPLETED

 

오랫동안 실행되는 포그라운드 서비스에 관한 시스템 알림

앱이 포그라운드 서비스를 오랫동안(24시간 중에서 20시간 이상) 실행하는 것을 시스템이 감지할 경우, 시스템은 사용자에게 FGS 작업 관리자를 확인하도록 안내하는 알림을 보냅니다. 알림에는 아래와 같은 텍스트가 포함됩니다.

  -> APP is running in the background for a long time. Tap to review.

* 참고: 시스템이 앱에 이 알림을 표시하면 최소 30일이 지난 후까지 비슷한 알림이 다시 표시되지 않습니다.

 

시스템은 다음 조건 중 하나라도 충족되면 이 알림을 표시하지 않습니다.

  • 포그라운드 서비스와 연결된 알림이 표시됩니다. 즉, 사용자가 아직 알림을 스와이프하여 없애지 않은 경우
  • 포그라운드 서비스 유형이 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK 또는 OREGROUND_SERVICE_TYPE_LOCATION인 경우

앱이 24시간 중 4시간 이상 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK 또는 FOREGROUND_SERVICE_TYPE_LOCATION 유형의 포그라운드 서비스를 실행하는 경우 시스템은 앱이 시작하는 어떠한 포그라운드 서비스에 대해서도 오랫동안 실행되는 포그라운드 서비스 알림을 보내지 않습니다.

 

예외

아래와 같은 경우에는 Android 13에 도입된 모든 배터리 수명 연장 규칙으로부터 앱이 제외 됩니다.

  • 시스템 앱 및 시스템 바인딩 앱
  • 컴패니언 기기 앱
  • 데모 모드 기기에서 실행 중인 앱
  • 기기 소유자 앱
  • 프로필 소유자 앱
  • 지속 앱
  • VPN 앱
  • ROLE_DIALER 역할이 있는 앱
  • 사용자가 시스템 설정에서 '무제한' 기능을 제공하도록 명시적으로 지정한 앱

다음과 같은 경우에는 앱이 'restricted' 앱 대기 버킷에 진입하지 않으며, 앱이 8일 비활성 트리거를 우회합니다.

  • 활성 위젯이 있음
  • 다음 권한 중 하나 이상이 부여됨:

아래와 같은 경우에는 배터리 수명 연장 규칙에서 앱이 제외되나, 시스템이 오랫동안 실행되는 포그라운드 서비스에 관한 알림은 전달 합니다.

  • 진행 중인 활성 MediaSession이 있음
  • 다음 권한 중 하나 이상이 부여됨:

 

테스트

백그라운드 사용 방지

앱이 백그라운드에서 실행되는 것을 방지하려면 터미널 창에서 다음 명령어를 실행합니다.

adb shell cmd appalls set <PACKAGE_NAME> RUN_ANY_IN_BACKGROUND deny

 

앱을 제한됨 버킷에 배치

시스템이 앱을 제한됨 버킷에 배치하도록 하려면 터미널 창에서 다음 명령어를 실행합니다.

adb shell am set-standby-bucket <PACKAGE_NAME> restricted
Comments