안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji

카카오맵 공식 블로그

알립니다/기타공지

안드로이드 9.0 OS 이상에서 백그라운드 실행 허용하는 방법 안내

카카오맵 2019. 4. 24. 16:09

안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji

안녕하세요.

카카오맵 담당자 입니다.

안드로이드 OS 9.0 이상을

사용하는 분들 중에

승하차 알람이 종료되는 현상이 있어서

사용 가이드 안내 드리고자 합니다.

OS 9.0 이상부터 백그라운드 실행을

제한 할 수 있는 기능이 생겼습니다.

해당 기능은 직접 설정할 수도 있지만 

사용환경에 따라 OS에서 자동으로 

백그라운드 실행 제한 설정으로 변경할 수 있습니다. 

백그라운드 실행이 허용이 안될 경우 

승하차 알람을 정상적으로 이용할 수 없습니다.

설정 방법을 아래 캡쳐 화면과 함께 안내 드리오니,

승하차 알람을 이용 중이신 분들은

아래 내용을 참고 부탁 드립니다.

✔︎ 삼성 단말

1. 배터리를 최적화하지 않는 방법

사용환경에 따라서 자동으로 백그라운드 실행 제한이 될 수 있는데

이 부분을 해결하려면 카카오맵을 최적화 하지 않는 앱으로 설정하시면 됩니다.

[설정 ‣ 검색  배터리 사용량 최적화  최적화 하지 않은 앱 클릭 후 전체 선택  카카오맵 ON을 OFF로 변경]


✔︎ LG 단말

1. 절전 기능 예외 앱 설정 방법

자동으로 백그라운드 실행 제한이 설정되지 않도록 하려면

카카오맵을 절전 기능 예외 앱으로 설정하시면 됩니다.

[설정 ‣ 일반 탭 ‣ 배터리 ‣ 절전 기능 예외 앱 ‣ 카카오맵을 ON]

참고사항!

위에 안내 드린 설정은 '카카오맵, 다음앱, 다음카페'와

설정이 연동됩니다.

배터리 메뉴 클릭 시 앱 아이콘이

카카오맵이 아닌 다음앱, 다음카페 아이콘이 나올 수 있습니다.

이 부분 설정하실 때 참고 부탁 드립니다.

승하차 알람 이용 중에 알람이 안오거나,

알람이 종료되는 경험이 있다면

백그라운드 실행 허용 여부를

확인 부탁 드리겠습니다.

앞으로도 카카오맵 많은 이용 부탁드립니다.

감사합니다.

제가 구현한 하이브리드 앱이 해당 메뉴에 들어가게 되면 db에 로그가 10초마다 저장 될 수 있도록 하는 Timer를 구현했었습니다. 안드로이드 7.1인 폰으로 테스트하니까 앱 종료 하지 않는 이상은 잘 작동하였습니다. 이번에 폰을 바꾸면서 안드로이드 12로 업데이트하고나니 잘 돌던 타이머가 잠금화면 상태만 되면 10초씩 돌던 Timer가 불규칙하게 찍힙니다.

휴대폰에 백그라운드에 제한 줄 수 있을 만한 건 다 해제시키고 했는데 이런 경우에는 어떻게 수정하면 좋을까요?

오늘도 더 나은 코드를 작성하였습니까?

Background에 있다는 것

백그라운드 작업을 이해 하기전에 앱이 forground에 있다는 사실을 명확하게 이해할 필요가 있다.

앱이 아래 상황중 단 1개라도 해당이 된다면 앱은 forground에 있다.

- 화면에 Activity가 보인다면 started, paused 상태와 관계 없이 앱은 forground에 있다.

- 앱이 forground service를  실행하고 있다

- 앱이 다른 forground 앱이랑 연결될 때 service 중 하나에 바인딩하거나 해당 contentsProvider 중 하나를 사용하여 앱에 연결됩니다.

예를 들어 다른 앱이나 시스템이 아래 항목에 연결되면 앱이 forground에 있는 것

  • - 입력(소프트 키보드가 앱에 떠 있는 경우)
  • - wallpaper(움직이는 배경화면을 실행 시키는 service)
  • - NotificationListenerService(notification을 핸들링 하는 service)
  • - Voice or text service
  • - music service

위 어떤것에도 해당되지 않으면 앱은 background에 있다고 보면된다.

Background 작업에 맞는 도구 찾기

백그라운드에서 작업을 실행하면 RAM 및 배터리와 같은 기기의 제한된 리소스가 소모됩니다.

백그라운드 작업은 장치의 배터리 수명을 저하 시키거나 사용자가 비디오 시청, 게임 플레이, 카메라 사용과 같은 시간에 장치 성능 저하를 경험할 수 있다.

배터리 수명을 개선하고 더 나은 사용자 경험을 제공하기 위해 Android는 백그라운드 실행에 대한 제한을 설정하기 위해 여러 릴리스에 걸쳐 발전했습니다. 아래와 같은 제한이 존재한다.

- 잠자기 및 앱 대기 : 화면이 꺼져 있고 기기가 유휴 상태이고 충전 중이 아닐 때 앱 동작을 제한합니다.

- 백그라운드 위치 제한:  백그라운드 앱이 사용자의 현재 위치를 검색 할 수있는 빈도를 제한합니다.

- 백그라운드 서비스 제한 : 백그라운드 서비스가 실행되고 숨겨 지거나 보이지 않는 방식으로 CPU / 네트워크를 사용하지 못하도록 제한

- App Standby Buckets 가장 최근에는 사용자가 사용하지 않는 앱이 쓸수있는 리소스를 제한 

-App Restrictions 시스템이 백그라운드에서 시스템 리소스에 대한 앱의 액세스를 제한하라는 메시지를 표시

-  Battery Saver improvements

개발을 하다보면 여러 상황해서 백그라운드에서 처리해야될 작업이 생긴다 이 경우, 서로 다른 상황에 때라 처리가 필요하다.

백그라운드 실행을 구현하는 데 사용할 도구를 결정하려면 개발자가 수행하려는 작업과 제한 사항을 명확하게 이해해야합니다.

아래 순서도는 결정을 내리는 데 도움이 될 수 있습니다.

안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji
안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji

WorkManager

모든 OS 백그라운드 실행 제한을 고려하여 백그라운드 실행에 권장되는 솔루션입니다. 지연된 경우에도 작업이 실행되도록 보장해야하는 경우 WorkManager를 사용해야합니다. 이 API를 사용하면 작업 (일회성 또는 반복)을 예약하고 작업을 연결 및 결합 할 수 있습니다. 장치가 유휴 상태이거나 충전 중일 때 트리거하거나 콘텐츠 제공자가 변경 될 때 실행하는 것과 같은 실행 제약 조건을 적용 할 수도 있습니다.

예) 로그를 서버에 업로드하기 위해 압축해야하는 경우입니다. 이를 위해 두 개의 작업 요청을 생성할 수 있습니다.

첫째 : 파일을 압축합니다. 이 단계에서 장치를 충전해야한다는 제약 조건을 추가 할 수 있습니다.

둘째 : 서버에 업로드합니다. 이 요청의 경우 유효한 연결이있을 때만 작업이 트리거되도록 네트워크 연결 제약 조건을 추가해야합니다.

두 작업을 대기열에 추가 한 후 WorkManager는 앱이 필요한 리소스에 액세스 할 수있을 때 작업을 실행합니다.(작업 체이닝)

WorkManager의 또 다른 좋은 기능은 전원 관리 기능을 반영한다는 것입니다. 

따라서 작업이 정의 된 시간에 실행되도록 예약되어 있고 해당 시간에 장치가 잠자기 상태에있는 경우

WorkManager는maintenance window 동안 작업을 실행하려고합니다. 제약 조건이 충족되거나 잠자기가 해제 된 후.

*Doze mode / maintainance window

iamrealizer.tistory.com/37

안드로이드 DOZE 모드 관련 처리 공부내용 (6.0, 7.0기준)

'포트폴리오' 용으로 만든 알람앱이 하나 있다. 알람이 울리는 시간이 되면, 잠금화면 위에  알람이 울리는 구조다. 처음에는 테스트를 위해, 2분 내지 3분 뒤 시간으로 맞춰서, 알람을 테스트했

iamrealizer.tistory.com

안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji

새로운 온라인 콘텐츠(서버) 동기화와 같은 외부 이벤트에 대한 응답으로 장기 실행 작업을 예약하려면 Firebase 클라우드 메시징을 사용하여 앱에 알리고 WorkManager로 작업 요청을 만들어 콘텐츠를 동기화한다. 즉, 푸쉬알림을 통해 사용자에게 알리고 한다. 

사용자가 앱을 떠나거나 화면을 꺼도 지연없이사용자가 시작한 작업을 완료해야하는 경우 (예 : 음악 / 비디오 재생 또는 탐색의 경우) Foreground Service를 사용해야합니다.

작업을 트리거하고 사용자 상호 작용을 포함하며 연기 할 수없는 정확한 시간에 작업을 실행해야하는 경우 AlarmManager(특히 setExactAndAllowWhileIdle 메서드)를 사용합니다. 

  • 환자의 약을 먹을 시간 알림
  • TV방송의 시작시간

Alarm이 트리거되면 작업을 완료하는 데 몇 초 밖에 주어진 시간이 없다면,앱이 네트워크에 액세스하지 못할 수 있습니다 (예 : 잠자기 중 또는 앱 대기 버킷으로 인해).

네트워크가 정말로 필요하고 긴 작업을 수행하려면 WorkManager를 사용하자

wakeup 알람이 트리거 될 때마다 장치는 저전력 모드에서 나오고 시간이 지남에 따라 배터리 수명에 큰 영향을 미칠 수있는 부분적인 wake lock()을 유지합니다. 이는 Google Play Console을 통해 제공되는 Android Vitals에 강조 표시된 과도한 웨이크 업 통계를 통해 모니터링 할 수 있습니다

안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji
안드로이드12 백그라운드 앱 유지 - andeuloideu12 baeggeulaundeu aeb yuji