기기를 켜진 상태로 유지

사용자가 Android 지원 기기를 유휴 상태로 두면 배터리가 소모되지 않도록 기기가 빠르게 일시중지 상태로 전환됩니다. 그러나 앱에서 CPU가 일시중지 상태로 전환되지 않도록 해야 하는 경우가 있습니다. 경우에 따라 앱이 작동하는 동안 화면을 켜 두어야 할 수도 있습니다. 다른 경우에는 앱이 화면을 켜진 상태로 유지할 필요가 없지만 CPU가 활성화되어 있어야 합니다.

이를 위해 취하는 접근 방식은 앱의 필요에 따라 다릅니다. 하지만 일반적인 규칙은 앱이 시스템 리소스에 미치는 영향을 최소화할 수 있는 가능한 한 가장 가벼운 방식을 사용하는 것입니다. 이 문서는 상황에 적합한 Android 기술을 선택하는 데 도움이 됩니다.

적절한 기술 선택

기기를 깨어 있게 하는 가장 좋은 방법은 앱의 요구사항에 따라 달라집니다. 이 섹션에서는 적절한 접근 방식을 선택하는 데 도움이 됩니다.

기기를 깨어 있는 상태로 유지하기 위한 적절한 접근 방식을 선택하는 방법을 요약한 플로우 차트 플로우 차트의 내용은 다음 텍스트에서 자세히 설명합니다.

  • 앱에서 화면을 계속 켜야 하나요?
    • 인 경우 화면 켜기 유지를 참고하세요. 필요한 작업을 실행하는 특수 목적 API가 있을 수 있습니다. 예를 들어 전화 통화 UI를 구현하는 경우 필요한 경우 화면을 켜 두는 Android 텔레콤 프레임워크를 사용할 수 있습니다. 상황에 맞는 특수 목적 API가 없는 경우 keepScreenOn API를 사용할 수 있습니다.
  • 앱에서 포그라운드 서비스를 실행 중이며 서비스가 실행되는 동안 화면이 꺼져 있을 때 기기를 깨어 있어야 하나요?
    • 아니요인 경우 기기를 깨어 있게 유지할 필요가 없습니다. 사용자가 앱과 적극적으로 상호작용하는 경우 기기는 계속 깨어 있습니다. 사용자가 앱과 상호작용하지 않고 포그라운드 서비스를 실행하고 있지 않은 경우 필요한 경우 기기를 일시중지 모드로 전환해야 합니다. 사용자가 앱을 사용하지 않는 동안 일부 작업이 실행되도록 하려면 백그라운드 작업 문서에서 최적의 옵션을 찾아보세요.
    • 인 경우 먼저 포그라운드 서비스를 실제로 사용해야 하는지 확인합니다. 상황에 따라 포그라운드 서비스 대신 요구사항을 충족하는 데 사용할 수 있는 특수 목적 API가 있을 수 있습니다. 이러한 정보는 포그라운드 서비스 문서에서 확인할 수 있습니다. 예를 들어 사용자의 위치를 추적해야 하는 경우 location 포그라운드 서비스 대신 geofencing API를 사용할 수 있습니다.
  • 포그라운드 서비스가 실행 중이고 기기 화면이 꺼져 있는 동안 기기가 정지되면 사용자 환경에 해가 되나요? 예를 들어 포그라운드 서비스를 사용하여 알림을 업데이트하는 경우 기기가 정지되더라도 사용자 환경이 나쁘지 않습니다.
    • 아니요인 경우 wakelock을 사용하지 않습니다. 사용자가 기기와 상호작용하면 작업이 자동으로 재개되어 정지 상태에서 해제됩니다.
    • 인 경우 wake lock을 사용해야 할 수 있습니다. 하지만 기기를 깨어 있게 하는 작업에서 설명한 대로 이미 API를 사용 중이거나 대신 wake lock을 선언하는 작업을 실행하고 있는지 확인해야 합니다.

기기를 켜진 상태로 유지하는 작업

앱이 다음 중 하나를 실행하는 경우 wake lock을 직접 설정할 필요가 없습니다. 다음 작업과 API는 모두 기기를 깨어 있게 합니다.

  • 오디오를 재생하는 경우 오디오 시스템이 wake lock을 설정하고 관리하므로 개발자가 직접 할 필요가 없습니다.
  • WorkManager, JobScheduler, DownloadManager와 같은 작업 예약 API 또는 라이브러리를 사용하는 경우 시스템 또는 라이브러리가 대신 웨이크 락을 획득합니다.
  • Media3 ExoPlayer를 사용하는 경우 ExoPlayer.setWakeMode()를 사용하여 플레이어가 웨이크 락을 설정하도록 할 수 있습니다.
  • 특정 기기 센서는 wake-up 센서입니다. SensorManager를 사용하여 이러한 센서가 보고할 데이터가 있으면 기기를 깨우도록 할 수 있습니다. 센서가 깨우기 센서인지 확인하려면 Sensor.isWakeUpSensor를 호출합니다.

참고 항목