전원 관리

Android 9(API 레벨 28)에서는 기기 전원 관리를 개선하기 위한 새로운 기능이 도입됩니다. 이러한 변경사항은 이전 버전에 이미 있는 기능들과 더불어 시스템 리소스를 가장 필요로 하는 앱에 해당 리소스가 분배되도록 보장합니다.

전원 관리 기능은 다음과 같은 두 가지 범주로 구분됩니다.

앱 대기 버킷
시스템은 CPU 또는 배터리와 같은 기기 리소스에 대한 앱 액세스를 사용자의 사용 패턴에 따라 제한합니다. 이것은 Android 9.
절전 모드 개선
배터리 세이버가 켜지면 시스템이 모든 앱에 제한을 적용합니다. 이 기능은 Android 9에서 개선되었습니다.

앱 대기 버킷

Android 9에서는 앱 대기 버킷이라는 새로운 배터리 관리 기능을 소개합니다. 앱 대기 버킷을 사용하면 시스템이 앱의 우선순위를 지정할 수 있습니다. 리소스 기반 요청 앱이 얼마나 최근에 얼마나 자주 사용되었는지에 관한 정보를 수집합니다. 앱 사용 기반 각 앱은 5개의 우선순위 버킷 중 하나에 배치됩니다. 시스템은 앱이 어떤 버킷에 있는지에 기반해 각 앱에서 사용 가능한 기기 리소스를 제한합니다.

5개의 버킷은 다음과 같은 특성에 따라 앱에 우선순위 그룹을 지정합니다.

활성

사용자가 현재 앱을 사용 중인 경우 앱은 활성 버킷에 있으며, 예:

  • 앱에서 활동을 실행했습니다.
  • 앱에서 포그라운드 서비스를 실행 중입니다.
  • 앱에 의해 사용되는 콘텐츠 제공자와 연결된 동기화 어댑터가 포그라운드 앱
  • 사용자가 앱에서 보낸 알림을 클릭합니다.

앱이 활성 버킷에 있으면 시스템은 앱의 작업, 알람, FCM 메시지 등의 정보를 수신할 수 있습니다.

작업 세트

자주 실행되지만 현재 활성 상태가 아닌 경우 앱은 작업 세트 버킷에 있습니다. 예를 들어 사용자가 거의 매일 실행하는 소셜 미디어 앱은 작업 세트에 배치될 가능성이 높습니다. 앱이 간접적으로 사용될 때에도 작업 세트 버킷으로 승격됩니다.

앱이 작업 세트에 있다면 시스템은 앱의 작업 실행 및 알람 트리거 기능에 가벼운 제한을 적용합니다. 자세한 내용은 전력 관리 제한사항.

자주 사용

정기적으로 사용되나 매일 사용되지 않는 경우 앱은 자주 사용 버킷에 있습니다. 예를 들어 사용자가 헬스장에서 실행하는 운동 추적 앱은 자주 사용 버킷에 있을 수 있습니다.

앱이 자주 사용 버킷에 있다면 시스템은 작업을 실행하고 알람을 트리거하는 기능이 있으며 높은 우선순위의 FCM 메시지를 보냅니다. 자세한 내용은 전원 관리 제한사항을 참고하세요.

드물게 사용

앱이 자주 사용되지 않으면 Rare 버킷에 배치됩니다. 예를 들어 호텔 앱이 사용자가 호텔에 머무는 동안만 달릴 수 있지만 버킷과 동기화할 수 있습니다

앱이 드물게 사용 버킷에 있다면 시스템은 작업을 실행하고 알람을 트리거하고 우선순위가 높은 FCM 메시지를 수신할 수 있는 기능이 추가되었습니다. 시스템은 앱의 인터넷 연결 기능도 제한합니다. 자세한 내용은 전원 관리 제한사항을 참고하세요.

사용 안함

설치되었지만 한 번도 실행되지 않은 앱은 Never 버킷에 할당됩니다. 시스템은 이러한 앱에 매우 엄격한 제한을 적용합니다.

시스템은 각 앱을 우선순위 버킷에 동적으로 할당하여 필요에 따라 앱을 재할당합니다. 시스템은 머신러닝을 사용하여 각 앱이 사용될 가능성을 판단하고 적절한 버킷에 앱을 할당하는 미리 로드된 앱에 의존할 수 있습니다. 시스템에서 앱이 기기에 없으면 시스템은 기본적으로 얼마나 최근에 사용되었는지 확인할 수 있습니다 더 활성 상태인 앱은 앱에 더 높은 우선순위를 부여하여 앱에서 사용할 수 있는 시스템 리소스가 늘어납니다. 특히 버킷이 앱의 작업 실행 빈도, 앱이 트리거할 수 있는 빈도를 결정합니다. 앱이 높은 우선순위 Firebase Cloud를 수신할 수 있는 빈도 메시지(FCM) 메시지 이러한 제한사항은 기기가 배터리 전원을 사용하는 동안에만 적용됩니다. 시스템 은 기기가 충전되는 동안 앱에 이러한 제한을 적용하지 않습니다.

모든 제조업체는 비활성 앱을 버킷에 할당하는 방식에 관한 자체 기준을 설정할 수 있습니다. 앱이 어느 버킷에 있는지에 영향을 주려고 해서는 안 되며 있습니다. 대신 어떤 환경에서도 앱이 잘 동작하도록 하는 데 집중하세요. 버킷이 있을 수 있습니다 앱이 현재 어떤 버킷에 있는지 확인할 수 있도록 새 메서드 호출 UsageStatsManager.getAppStandbyBucket()

권장사항

앱이 이미 잠자기 및 앱 대기 새로운 전원 관리 기능을 다루는 것이 어렵지 않을 것입니다. 그러나 이전에 잘 작동한 일부 앱 동작이 문제를 일으킬 수 있습니다.

  • 앱을 하나의 버킷에 넣기 위해 시스템을 조작하려고 해서는 안 됩니다. 있습니다. 시스템의 버케팅 방식은 변경될 수 있으며 모든 기기 제조업체는 자체 알고리즘으로 자체 버케팅 앱을 작성하도록 선택할 수 있습니다. 그보다는 어느 버킷에 있든 앱이 적절히 동작하는지 확인하세요.
  • 앱에 런처 활동이 없다면 활성 버킷으로 승격되지 않을 수 있습니다. 앱을 다시 디자인하여 이러한 유형의 사용자에게 있습니다.
  • 앱의 알림을 실행할 수 없는 경우 사용자가 알림을 트리거할 수 없습니다. 활성 버킷으로 승격할 수 있습니다. 포함 이 경우 적절한 알림을 다시 디자인하여 확인할 수 있습니다 가이드라인은 Material Design 알림 디자인 패턴을 따라야 합니다.
  • 마찬가지로 앱이 높은 우선순위의 FCM 메시지를 수신할 때 알림을 표시하지 않으면 사용자가 앱과 상호작용할 수 없으므로 앱이 활성 버킷으로 승격되지 않습니다. 사실 높은 우선순위의 FCM 메시지의 유일한 용도는 알림을 사용자에게 푸시하는 것이므로 이러한 상황이 발생해서는 안 됩니다. 사용자 상호작용을 트리거하지 않을 때 FCM 메시지를 우선순위가 높은 메시지로 부적절하게 표시하는 경우, 다른 부정적인 결과를 일으킬 수 있습니다. 예를 들어, 앱이 할당량을 소진하는 결과를 초래할 수 있으며, 진짜 긴급한 FCM 메시지가 일반 우선순위 메시지로 처리될 수 있습니다.

    참고: 사용자가 알림을 반복적으로 닫으면 시스템은 나중에 알림 차단 옵션을 사용자에게 제공합니다. 앱을 활성 버킷에 유지하기 위해 사용자에게 불필요한 알림을 보내지 마세요.

  • 앱이 여러 패키지로 분할된 경우 이러한 패키지는 버킷이 다르고 액세스 수준도 다릅니다 다양한 버킷에 할당된 패키지로 이러한 앱을 테스트하여 앱이 제대로 동작하는지 확인해야 합니다.

절전 모드 개선

Android 9에서는 배터리 세이버 모드가 여러 가지로 개선되었습니다. 기기 제조업체는 적용되는 정확한 제한사항을 결정합니다. 예를 들어 AOSP 빌드에서 시스템은 다음 제한사항을 적용합니다.

  • 시스템은 앱이 유휴 상태가 되기를 기다리는 대신 앱을 더 적극적으로 앱 대기 모드로 전환합니다.
  • 백그라운드 실행 제한은 대상 API와 관계없이 모든 앱에 적용됩니다. 있습니다.
  • 화면이 꺼져 있으면 위치 서비스가 사용 중지될 수 있습니다.
  • 백그라운드 앱에는 네트워크 액세스 권한이 없습니다.

또한, 다른 기기별 전원 최적화 기능들이 있습니다. 자세한 내용은 전력 관리 제한사항을 설명하는 페이지를 참고하세요.

절전 모드가 작동 중일 때 앱을 테스트하는 것이 좋습니다. 나 기기의 설정 > 배터리 절전 모드 화면

테스트 및 문제 해결

새로운 전원 관리 기능은 Android 9 기기에서 실행되는 모든 앱에 영향을 미칩니다. 앱이 Android 9을 타겟팅하지 않을 수 있습니다 이 기기에서 앱이 제대로 작동하는지 확인하는 것이 중요합니다.

다양한 조건에서 앱의 주요 사용 사례를 테스트하여 서로 상호 작용하는 방법을 배웠습니다. Android 디버그 브리지 명령어를 사용해 기능을 사용 및 사용 중지합니다.

Android 디버그 브리지 명령어

Android 디버그 브리지 셸 명령어를 사용할 수 있습니다. 몇 가지 전원 관리 기능을 테스트합니다.

ADB를 사용하여 기기를 잠자기 모드로 전환하는 방법은 다음을 참조하세요. 잠자기 및 앱 대기 모드로 테스트.

앱 대기 버킷

ADB를 사용하여 앱 대기 버킷에 앱을 수동으로 할당할 수 있습니다. 앱의 버킷을 변경하려면 다음 명령어를 사용합니다.

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

또한 이 명령을 사용하여 여러 패키지를 동시에 설정할 수 있습니다.

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

앱이 어떤 버킷에 있는지 확인하려면 다음을 실행하세요.

$ adb shell am get-standby-bucket [packagename]

packagename 매개변수를 전달하지 않으면 모든 앱의 버킷이 나열됩니다. 앱은 또한 다음을 호출하여 런타임에 버킷을 찾을 수도 있습니다. 새 메서드 UsageStatsManager.getAppStandbyBucket()

절전 모드

저전력 조건 하에서 앱이 어떻게 동작하는지 테스트하기 위한 여러 명령어가 있습니다.

기기의 플러그를 뽑고 시뮬레이션하려면, 다음 명령을 사용하세요.

$ adb shell dumpsys battery unplug

저전력 조건 하에서 기기가 어떻게 동작하는지 테스트하려면, 이 명령을 사용하세요.

$ adb shell settings put global low_power 1

테스트를 마친 후에는 다음 명령어로 수동 기기 설정을 실행취소할 수 있습니다.

$ adb shell dumpsys battery reset