Doze 와 App Standby

이성민·2024년 12월 5일
0

안드로이드

목록 보기
12/19

마시멜로(6.0) 부터 배터리 최적화를 위해 doze 모드와 app standby 모드가 도입되어 많은 안드로이드 개발자들이 고난을 겪어왔다.

Doze 진행 시 제한되는 항목

  1. 네트워크 엑세스 비활성화
  2. Wake Lock 무시
  3. 알람 지연
  4. wifi 스캔 중지
  5. 동기화 작업 중지

app standby 진행 시 제한되는 항목

  1. 네트워크 엑세스 비활성화
  2. 백그라운드 작업 실행 중지
  3. 동기화 및 Job Schedular 작업 중지

이러한 제한은 베터리 소모를 줄이는 데 효과적이지만 백그라운드에서 통신 작업을 해야하는 앱을 개발한 개발자들은 이를 고려하여 설계를 해야하기에 매우 까다로운 존재라고 할 수 있다.

필자의 경우도 백그라운드에서 해당 단말기의 좌표값을 서버로 계속 보내야하는 핵심 기능을 유지하기 위해 방법을 고민해야만 했다.

찾아본 바 개발자가 대응할 수 있는 방법은 다음과 같았다.

  1. WorkManager를 사용하여 효율적인 백그라운드 작업 설계
  2. FCM의 높은 우선순위 메시지를 통해 중요한 알림을 처리
  3. 정기적으로 사용자가 앱을 열 수 있도록 유도
  4. 앱의 기능을 중요도에 따라 분류하고, 상황에 따라 분리
  5. 앱을 화이트리스트에 등록시켜 배터리 사용 최적화 모드를 제외

이 중에서 지속적인 통신을 위해 선택한 방법은 5번이었다.

 Intent intent = new Intent();
                intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + getContext().getPackageName()));
                startActivity(intent);

앱 시작 시 다이얼로그로 사용자에게 배터리 사용량 최적화 제외 관련 동의를 받고, 화이트리스트에 등록을 시키게 되면 백그라운드에서 통신을 문제없이 보낼 수 있다.

하지만 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 퍼미션이 선언 된 앱은 Google Play 에 앱 등록시 거부될 수도 있다.

(https://developer.android.com/training/monitoring-device-state/doze-standby#whitelisting-cases)

profile
Android Developer 이성민입니다

0개의 댓글