한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
Android에서의 최신 백그라운드 실행 방법을 알려드립니다
2018년 12월 3일 월요일
<원문 링크는
이곳
에서 확인할 수 있고 번역 리뷰에는 이승민(Android GDE)님이 도움주셨습니다.>
게시자: 파트너 개발자 어드보케, 파트너 DevRel, Luiz Gustavo Martins
지난 수년 동안 Android에서의 백그라운드 작업 실행은 진화해 왔습니다.
최신 앱을 만들기
위해서는 최신 유행에 따른 백그라운드 작업 실행 방법을 학습하는 것은 중요합니다.
앱은 언제 백그라운드에 있게 되는가?
백그라운드 실행이 무엇인지 알아보기 전에, Android가 앱이 포그라운드에 있다고 판단하는 시점에 대해 분명히 이해할 필요가 있습니다. 다음 조건 중 하나라도 참일 경우 앱이 포그라운드에 있는 것으로 간주합니다.
액티비티가 시작되든 일시 중지되든 상관없이, 앱에 보이는 액티비티가 있는 경우.
앱에
포그라운드 서비스
가 있는 경우.
또 다른 포그라운드 앱이
앱의 서비스 중 하나에 바인드하거나
앱의
콘텐츠 제공자
중 하나를 사용하는 경우. 예를 들면 다른 앱 또는 시스템이 다음을 바인드할 경우 앱은 포그라운드에 있게 됩니다.
IME
배경화면 서비스
알림 리스너
음성
또는
텍스트
서비스
차량에 음악을 스트리밍 중일 경우 음악 앱 (Android Auto-특수한 경우)
위의 어떤 조건에도 해당하지 않는 경우 앱이 백그라운드에 있는 것으로 간주됩니다.
백그라운드 실행 변경 사항
백그라운드에서 작업 실행은 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 팀 간의 협업으로 제작됩니다.
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed