본문 바로가기
개발/Google Developers korea 블로그

Android에서의 최신 백그라운드 실행 방법을 알려드립니다

by darksilber 2018. 12. 7.
반응형

출처 - https://developers-kr.googleblog.com/

 

<원문 링크는 이곳에서 확인할 수 있고 번역 리뷰에는 이승민(Android GDE)님이 도움주셨습니다.>
게시자: 파트너 개발자 어드보케, 파트너 DevRel, Luiz Gustavo Martins

지난 수년 동안 Android에서의 백그라운드 작업 실행은 진화해 왔습니다. 최신 앱을 만들기 위해서는 최신 유행에 따른 백그라운드 작업 실행 방법을 학습하는 것은 중요합니다.



앱은 언제 백그라운드에 있게 되는가?

백그라운드 실행이 무엇인지 알아보기 전에, Android가 앱이 포그라운드에 있다고 판단하는 시점에 대해 분명히 이해할 필요가 있습니다. 다음 조건 중 하나라도 참일 경우 앱이 포그라운드에 있는 것으로 간주합니다.

위의 어떤 조건에도 해당하지 않는 경우 앱이 백그라운드에 있는 것으로 간주됩니다.


백그라운드 실행 변경 사항

백그라운드에서 작업 실행은 RAM 이나 배터리 같은 기기의 한정 리소스를 소모하게 됩니다. 이는 사용자 환경에 부정적으로 작용할 수 있습니다. 예를 들면 백그라운드 작업은 기기의 배터리 수명을 저하시킬 수 있으며 사용자는 동영상 시청, 게임 실행, 카메라 사용 등을 할 때 기기 성능이 저하됨을 경험할 수 있습니다.
배터리 수명을 향상시키고 더 나은 사용자 환경을 제공하기 위해 Android는 여러 번의 출시를 거쳐 점차적으로 백그라운드 실행에 대한 제한을 설정했습니다. 이러한 제한에는 다음 사항이 포함되어 있습니다.
  • 잠자기 및 앱 대기(화면이 꺼져있고 기기가 유휴 상태이며 충전 중이지 않은 경우 앱 행동을 제한)
  • 백그라운드 위치 제한(백그라운드 앱이 사용자의 현재 위치를 검색할 수 있는 빈도를 제한)
  • 백그라운드 서비스 제한 사항(숨겨지거나 보이지 않는 상태에서 CPU/네트워크를 실행하고 소비하지 않도록 제한)
  • 최신 제한 사항에는 사용자가 사용하지 않은 앱에서 사용 가능한 기기 리소스를 제한할 수 있는 앱 대기 버킷, 앱이 잘못된 동작을 나타내는 경우 앱이 백그라운드의 시스템 리소스에 접근하는 것을 제한하도록 시스템이 사용자에게 알리는 앱 제한, 그리고 다수의 배터리 세이버 개선 사항이 있습니다.


사용 사례 및 해결 방법

백그라운드 실행을 구현하는 데 사용할 도구를 결정하려면 개발자가 수행하고자 하는 사항과 제한 사항에 대해 명확히 이해해야 합니다. 다음 플로차트는 판단에 도움이 될 수 있습니다.

WorkManager는 모든 OS 백그라운드 실행 제한을 감안하여 백그라운드 실행에 권장되는 솔루션입니다. 작업이 지연되어도 반드시 실행되어야 하는 경우 WorkManager를 사용해야 합니다. 이 API를 사용하면 작업(일회성 또는 반복적작업)을 예약할 수 있으며 작업을 묶고 결합할 수 있습니다. 또한 기기가 유휴 상태 또는 충전 중인 경우 트리거하거나 콘텐츠 공급자 변경 시의 실행과 같이 실행 제한 사항을 적용할 수도 있습니다.

  • 로그를 압축하여 서버에 업로드해야 하는 경우를 예로 들 수 있습니다. 이를 위해서 다음 두 개의 작업 요청을 생성할 수 있습니다.
    • 첫째, 파일을 압축합니다. 이 단계에서는 기기를 충전해야 한다는 제한 사항을 추가할 수 있습니다.
    • 둘째, 파일을 서버에 업로드 합니다. 이 요청의 경우 연결이 올바를 때만 작업이 트리거되도록 네트워크 연결 제약 조건을 추가해야 합니다.

두 가지 작업을 모두 큐에 넣고 WorkManager는 앱이 필요한 리소스에 액세스할 수 있을 때 작업을 수행합니다.
WorkManager의 또 다른 장점은 전력 관리 기능들을 고려한다는 것입니다. 지정된 시간에 작업이 실행되도록 예약하고 그 시간에 장치가 잠자기 상태에 있는 경우, WorkManager는 제약 조건이 충족되거나 잠자기가 해제된 후 유지관리 기간동안 작업 실행을 시도하게 됩니다.
  • 새로운 온라인 콘텐츠에 대한 동기화 같은 외부 이벤트에 대응하여 장기 실행 작업을 예약하려면 Firebase 클라우드 메시징을 사용하여 앱에 이를 알린 후 WorkManager에서 컨텐츠 동기화를 위한 작업 요청을 생성합니다. "FCM으로 사용자에게 알리기"에서 이에 대해 더 자세히 알아볼 수 있습니다.
  • 음악/동영상 재생 또는 탐색 등의 경우 사용자가 앱을 종료하거나 화면을 끄더라도 사용자 시작 작업을 지연없이 완료해야 하는 경우 포그라운드 서비스를 사용해야 합니다. (이 시리즈의 다음 블로그 게시물에서 이러한 사용 사례에 대해 자세히 다룹니다.)
  • 행동을 유도하고 사용자 상호 작용을 포함하며 지연될 수 없는 정확한 시점에 작업을 실행해야 하는 경우 AlarmManager를 사용하십시오(더 구체적으로는 setExactAndAllowWhileIdle 방식). 다음은 시간 알람의 예시입니다.
    • 약 복용 시간 알림
    • TV 프로그램 시작 시간 알림

알람이 트리거되는 경우 작업을 완료할 수 있는 시간은 수 초에 불과하며 앱이 네트워크에 액세스하지 못할 수도 있습니다(예: 잠자기 실행 중 또는 앱 대기 버킷으로 인해) 네트워크 또는 장기 작업 실행이 반드시 필요한 경우, WorkManager를 사용하십시오. 절전 모드 해제 알람이 트리거될 때마다 기기는 저전력 모드에서 해제되어 시간 경과에 따라 배터리 수명에 상당한 영향을 미칠 수 있는 부분 가동 잠금 상태를 유지합니다. 이는 Google Play Console를 통해 제공되는 Android Vitals에 강조된 과도한 절전 모드 해제 통계를 통해 모니터링할 수 있습니다.
요약:



 

사용 사례
해결 방법
지연 가능한 작업의 실행 보장
  • 서버에 로그 업로드
  • 암호화/업로드할 콘텐츠 복호화/다운로드
WorkManager
외부 이벤트에 대한 대응으로 시작된 작업
  • 이메일과 같은 새로운 온라인 콘텐츠 동기화
FCM +WorkManager
사용자가 앱을 종료하더라도 즉시 실행해야 하는 사용자 시작 작업 지속
  • Music player
  • 활동 추적
  • 대중교통 네비게이션
포그라운드 서비스
정확한 시간에 알려야 하는 작업 같이 사용자 상호작용이 포함된 행동의 유도.
  • 알람 시계
  • 약 복용 시간 알림
  • TV 프로그램 시작 시간 알림
AlarmManager
사용자가 배터리를 절약하면서 즐길 수 있는 멋진 앱을 만들 수 있도록 백그라운드 실행을 신중하게 사용하십시오. Android의 백그라운드 작업 실행에 대해 더 알고 싶으시면 Android 개발자 사이트의 다양한 콘텐츠를 참조하십시오.
참고: WorkManager는 아직 미리보기로 공개 중입니다. 지금 당장 다른 해결 방법이 필요한 경우, WorkManager 적용에 제한이 있기는 하지만 JobScheduler를 사용해야 합니다. Jobscheduler는 Android 프레임워크의 일부로, Android API 21 이상에서 사용 가능하며, WorkManager는 API 14 이상에서 구동합니다.


 

감사의 말: 이 블로그 게시물은 Android Framework와 DevRel 팀 간의 협업으로 제작됩니다.
반응형

댓글