잠자기 및 앱 대기에 맞게 최적화

Android에는 사용자의 배터리 수명을 연장하는 두 가지 절전 기능이 있습니다. 기기가 전원에 연결되어 있지 않을 때 앱이 동작하는 방식 관리: 잠자기 앱 대기가 있습니다 잠자기 기능은 지연을 통해 배터리 소모를 줄입니다. 기기를 오랫동안 사용하지 않을 때 앱의 백그라운드 CPU 및 네트워크 활동 확인할 수 있습니다 앱 대기 모드는 애플리케이션이 잠시 후에 최근 사용자 활동이 없는 앱.

기기가 잠자기 모드에 있는 동안 앱은 배터리를 많이 사용하는 특정 기기에 액세스하는 경우 유지보수 기간까지 리소스가 지연됩니다 구체적인 제한사항 는 전원 관리 제한사항을 따릅니다.

잠자기 및 앱 대기 모드는 Android 6.0에서 실행되는 모든 앱의 동작을 관리합니다. 특히 API 수준 23을 타겟팅하는지 여부와 상관없이 이 API를 사용할 수 있습니다. 사용자에게 최고의 환경을 제공할 수 있도록 잠자기 및 앱에서 앱을 테스트하세요. 대기 모드를 시작하고 필요에 따라 코드를 조정합니다. 다음 섹션에서 세부정보를 확인할 수 있습니다

잠자기 이해

사용자가 기기의 플러그를 뽑고 일정 시간 동안 움직이지 않는 경우 화면이 꺼지면 기기가 잠자기 모드로 전환됩니다. 잠자기 모드에서는 시스템이 앱의 배터리 수명을 절약하기 위해 네트워크 및 CPU 집약적인 애플리케이션에 액세스할 수 있으며 제공합니다 또한 앱이 네트워크에 액세스하지 못하도록 하고 작업, 동기화 및 표준 알람이 포함됩니다.

시스템에서 앱이 완료될 수 있도록 주기적으로 잠시 잠자기를 종료합니다. 지연된 활동을 지원합니다 이러한 유지보수 기간 동안 시스템은 대기 중인 동기화, 작업 및 알람을 모두 실행하고 앱이 네트워크에 액세스하도록 허용합니다.

그림 1. 잠자기 모드는 반복 유지보수 기간을 제공하여 앱이 네트워크를 사용하고 대기 중인 활동을 처리할 수 있습니다.

유지보수 기간이 종료되면 시스템이 다시 잠자기 모드로 전환됩니다. 네트워크 액세스를 정지하고 작업, 동기화 및 알람을 지연시킵니다. 시간이 지남에 따라 시스템이 유지보수 기간을 덜 자주 예약하여 배터리 절약 충전 중이 아닐 때 더 오래 사용하지 않을 경우 배터리 소모량이 많아집니다.

사용자가 기기를 움직이거나 화면을 켜서 절전 모드를 해제할 때 충전기를 연결하면 시스템에서 잠자기가 종료되고 모든 앱이 정상으로 다시 시작됩니다. 있습니다.

잠자기 모드 제한사항

앱이 잠자기 모드에 있는 동안 시스템은 다음과 같은 제한 사항을 앱에 적용합니다.

잠자기 모드 체크리스트

잠자기 모드에 맞게 앱 조정

잠자기는 앱이 제공하는 기능에 따라 앱에 다른 영향을 줄 수 있습니다. 사용하는 서비스에 영향을 미칩니다. 많은 앱이 잠자기 주기 전반에서 정상적으로 작동함 . 어떤 경우에는 앱이 가장 적절한 방식으로 네트워크, 알람, 작업 및 동기화를 관리합니다. 앱은 효율적으로 각 유지보수 기간에 활동을 관리할 수 있습니다

알람 예약에 도움이 되도록 두 대의 AlarmManager를 사용할 수 있습니다 메서드: setAndAllowWhileIdle()setExactAndAllowWhileIdle()입니다. 이러한 방법으로 실행되는 모든 유형의 알림입니다.

네트워크 액세스가 잠자기 모드로 제한되는 경우에도 앱에 영향을 미칠 수 있습니다. 특히 앱이 있습니다. 앱이 네트워크에 지속적으로 연결되어 있어야 하는 경우 메시지를 수신할 수 없습니다. 다음과 같은 경우 Firebase 클라우드 메시징 (FCM)을 사용하세요. 있습니다.

앱이 잠자기 모드에서 예상대로 작동하는지 확인하려면 다음을 사용합니다. 시스템에서 잠자기 모드를 시작하고 종료하도록 하는 adb 명령어 앱의 동작을 관찰할 수 있습니다 자세한 내용은 잠자기 및 앱 대기 모드로 테스트.

앱 대기 이해

앱 대기 모드는 사용자가 비활성 상태가 아닐 때 시스템에서 앱이 유휴 상태라고 판단하게 해 줍니다. 적극적으로 활용하고 있습니다. 시스템은 사용자가 요청하지 않으면 이러한 결정을 내립니다. 다음 조건을 하나라도 충족하지 않고 일정 시간 동안 앱을 터치 적용됩니다.

  • 사용자가 명시적으로 앱을 실행합니다.
  • 앱에 활동으로 현재 포그라운드에 있는 프로세스가 있음 포그라운드 서비스에서 사용되거나 다른 활동 또는 포그라운드 서비스에서 사용 중일 수 있습니다.
  • 앱이 알림을 생성하여 사용자가 잠금 화면이나 확인할 수 있습니다.

사용자가 기기를 전원 공급 장치에 연결하면 시스템에서 앱을 해제합니다. 대기 상태에서 자유롭게 네트워크에 액세스하여 신속하게 액세스할 수 있습니다 기기가 오랫동안 유휴 상태인 경우 시스템은 유휴 앱의 네트워크 액세스를 하루에 한 번 정도 허용합니다.

기기가 유휴 상태일 때 FCM을 사용하여 앱과 상호작용

Firebase 클라우드 메시지 (FCM)는 클라우드에서 기기로 푸시하는 서비스로, 백엔드 서비스와 Android 기기의 앱 간 다운스트림 메시징 FCM 클라우드에 대한 영구적인 단일 연결을 제공합니다. 다음이 필요한 모든 앱 실시간 메시지는 이 연결을 공유할 수 있습니다. 이 공유 연결 배터리 소모를 크게 최적화할 수 있기 때문에 여러 개의 앱을 사용하여 자체적인 별도의 영구 연결을 유지하며, 배터리가 빠르게 소진될 수 있습니다. 따라서 앱에서 백엔드 서비스와 통합하는 경우 다음과 같은 경우 FCM을 사용하는 것이 좋습니다. 자체 영구 네트워크 연결을 유지보수하는 대신

FCM은 잠자기 및 앱 대기 유휴 모드와 함께 작동하도록 최적화되어 있습니다. FCM 높은 우선순위 메시지를 사용하면 앱의 절전 모드를 해제하여 사용자의 참여를 유도할 수 있습니다. 잠자기 또는 앱 대기 모드: 시스템에서 메시지를 전송하고 앱에 임시 액세스 권한을 부여합니다. 부분적인 wake lock으로 전환한 다음 기기나 앱을 사용할 수 있습니다 시간에 민감한 사용자에게 표시되는 알림의 경우 우선순위 메시지를 설정하여 잠자기 모드에서 전송할 수 있습니다. 높은 우선순위 메시지는 알림을 표시합니다. 자세한 내용은 FCM의 안내를 참고하세요.

앱 콘텐츠를 유지하는 등 알림이 전송되지 않는 메시지 백그라운드에서 최신 상태이거나 데이터 동기화를 시작하는 경우 우선순위가 보통인 FCM을 사용합니다. 메시지를 보낼 수 있습니다 보통 우선순위 메시지는 기기가 도착하지 않으면 즉시 전송됩니다. 있습니다. 기기가 잠자기 모드인 경우 유지관리 기간 또는 사용자가 기기의 절전 모드를 해제하는 즉시 잠자기로 설정합니다.

일반적으로 앱에 다운스트림 메시징이 필요한 경우 FCM 앱에서 이미 FCM을 사용하는 경우 우선순위가 높은 메시지를 사용하는지 확인합니다. 사용자에게 표시되는 알림으로 연결되는 메시지에만 적용됩니다.

기타 사용 사례 지원

거의 모든 앱이 네트워크 연결을 관리하여 잠자기를 지원할 수 있습니다. 경보, 작업, 동기화를 동기화하고 FCM 메시지를 사용하여 알림을 보낼 수 있습니다. 일부 용도 이것만으로는 충분하지 않을 수 있습니다. 이러한 경우 시스템은 잠자기 및 앱 대기에서 부분적으로 제외되는 앱의 구성 가능한 목록 최적화할 수 있습니다

부분적으로 제외된 앱은 네트워크를 사용하고 부분 절전 모드 해제를 유지할 수 있습니다. 잠금을 설정합니다. 그러나 이 경우에도 다른 제한사항이 적용됩니다. 다른 앱과 마찬가지로 해당 앱에 적용됩니다. 예를 들어 앱의 작업 및 동기화는 API 수준 23 이하에서는 지연되며 AlarmManager 알람이 실행되지 않습니다. 앱은 사용자가 다음을 호출하여 면제 목록에 있는 isIgnoringBatteryOptimizations()

사용자는 설정에서 제외된 앱 목록을 수동으로 구성할 수 있습니다. > 배터리 > 배터리 최적화 또는 시스템에서 은 앱이 사용자에게 면제를 요청하는 방법을 제공합니다.

를 통해 개인정보처리방침을 정의할 수 있습니다.

앱은 다음을 호출하여 현재 예외 목록에 있는지 여부를 확인할 수 있습니다. isIgnoringBatteryOptimizations()

잠자기 및 앱 대기 모드로 테스트

사용자에게 최고의 환경을 제공할 수 있도록 잠자기 모드에서 앱을 완전히 테스트하세요. 앱 대기가 있습니다

잠자기로 앱 테스트

다음을 실행하여 잠자기 모드를 테스트할 수 있습니다.

  1. Android 6.0 (API)으로 하드웨어 기기 또는 가상 기기 구성 수준 23) 이상의 시스템 이미지가 필요합니다.
  2. 기기를 개발 머신에 연결하고 앱을 설치합니다.
  3. 앱을 실행시킨 다음 활성 상태로 그냥 둡니다.
  4. 다음 명령어를 실행하여 시스템을 유휴 모드로 강제 적용합니다.
        $ adb shell dumpsys deviceidle force-idle
        
  5. 준비가 되면 다음 명령어를 실행하여 유휴 모드를 종료합니다.
        $ adb shell dumpsys deviceidle unforce
        
  6. 다음 명령어를 실행하여 기기를 다시 활성화합니다.
        $ adb shell dumpsys battery reset
        
  7. 기기를 다시 활성화한 후 앱의 동작을 관찰합니다. 제조업체 기기가 잠자기를 종료할 때 앱이 정상적으로 복구되는지 확인해야 합니다.

앱 대기 모드로 앱 테스트

앱으로 앱 대기 모드를 테스트하려면 다음 단계를 따르세요.

  1. Android 6.0 (API)으로 하드웨어 기기 또는 가상 기기 구성 수준 23) 이상의 시스템 이미지가 필요합니다.
  2. 기기를 개발 머신에 연결하고 앱을 설치합니다.
  3. 앱을 실행시킨 다음 활성 상태로 그냥 둡니다.
  4. 다음 명령어를 실행하여 앱에서 강제로 앱 대기 모드를 시작합니다.
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. 다음 명령어를 사용하여 앱이 활성화되는 것을 시뮬레이션합니다.
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. 활성화되면 앱의 동작을 관찰합니다. 앱이 대기 모드에서 단계적으로 복구됩니다 특히 앱이 알림과 백그라운드 작업이 예상대로 작동합니다.

예외로 허용되는 사용 사례

다음 표에서는 몇 가지 사용 사례와 이러한 사용이 허용되는지 여부를 보여줍니다. 앱에서 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS를 사용하도록 설정 인텐트 작업을 지원합니다 일반적으로 앱이 다음을 충족하지 않습니다. 잠자기 또는 앱 대기 모드로 인해 앱의 핵심 기능이 중단되거나 앱에서 FCM 높은 우선순위를 사용할 수 없는 기술적인 이유가 있음 메시지를 보낼 수 있습니다

자세한 내용은 지원 기타 사용 사례를 참고하세요.

유형 사용 사례 FCM 사용 가능 여부 예외가 인정되나요? 참고
채팅 또는 통화 앱 사용자에게 실시간 메시지를 전송해야 하는 동안 기기가 잠자기 모드이거나 앱이 앱 대기 모드입니다. 예, FCM을 사용합니다. 추가 불가능 FCM 높은 우선순위 메시지를 사용하여 앱의 절전 모드 해제 및 액세스 않습니다.
예, 하지만 FCM 높은 우선순위 메시지는 사용하지 않습니다.
채팅 또는 통화 앱 기업용 VOIP 앱을 제공합니다. 아니요, 기술적으로 다른 메시징에 의존하므로 FCM을 사용할 수 없습니다. 서비스 또는 잠자기 및 앱 대기 모드로 인해 앱의 핵심 기능이 중단됩니다. 추가 가능
위급 상황 정보 앱 사용자와 가족을 안전하게 보호하는 앱 해당하는 경우에만 입력합니다. 추가 가능
작업 자동화 앱 앱의 핵심 기능은 자동화된 작업을 예약하는 것 메시지, 음성 통화 또는 새로운 사진 관리 기능을 사용할 수 있습니다. 해당하는 경우에만 입력합니다. 추가 가능
주변기기 호환 앱 앱의 핵심 기능은 앱과의 지속적인 연결을 유지하는 것입니다. 주변 장치를 제공하기 위한 목적으로 사용되는 주변 장치 인터넷 액세스가 필요할 때입니다 해당하는 경우에만 입력합니다. 추가 가능
앱은 정기적으로 주변 장치에만 연결하여 동기화하면 됩니다. 또는 무선 헤드폰과 같은 장치에만 연결해야 하고 사용할 수 있습니다. 해당하는 경우에만 입력합니다. 추가 불가능