-
Android Standby BucketAndroid 2022. 7. 1. 13:56
- Android 9(API 28) 이상에서 앱 대기 버킷 지원
- 앱 대기 버킷은 최근에 사용자가 앱을 얼마나 자주 사용하였는지에 따라 앱의 리소스 요청 순위를 시스템이 지정하는데 판별함
- 앱 사용 패턴은 5가지 우선 순위 버킷 중 하나에 배치됨
- 시스템은 앱이 존재하는 버킷에 따라 각 앱에서 사용할 수 있는 기기 리소스를 제한함
Priority Bucket
- 시스템은 각 앱을 우선 순위 버킷에 동적으로 할당한 뒤, 필요에 따라 앱을 우선순위 버킷에 재할당을 한다.
- 시스템은 머신러닝을 통하여 각 앱이 사용될 가능성을 예상하여 결정하고, 머신러닝의 경우 적절한 버킷에 앱을 할당하기 위해 사전 로드된 앱을 참고할 수 있다.
- 현재 시스템에 로드된 앱이 없으면 시스템은 기본적으로 최근에 사용한 시간을 기준으로 앱을 정렬한다.
- 더 높은 우선순위를 부여하는 버킷에 앱이 할당되면 그 만큼 더 많은 시스템 리소스를 사용할 수 있다.
- 버킷은 앱의 작업이 실행되는 빈도와 앱의 알람을 트리거하는 빈도에 따라 결정한다.
이러한 제한 사항은 배터리 전원으로 켜져 있는 동안에만 적용된다. 시스템은 장치가 충전되는 동안 앱에 이러한 제한을 부과하지 않는다.
Buckets
- Active : 앱이 현재 사용중 or 최근에 사용
- Working set : 앱을 정기적으로 사용
- Frequent : 앱을 자주 사용하지만 매일 사용하지 않음
- Rare : 앱을 자주 사용하지 않음
- Restricted : 앱이 많은 시스템 리소스를 소비 or 바람직하지 않은 동작을 보일 경우
예외로 설치는 되었지만 실행되지 않은 앱을 위한 절대 버킷이 있음 단, 시스템은 이러한 앱에 과중한 제한을 가한다.
Active
- 앱의 Activity가 시작
- 앱이 Foreground Service 실행 중
- 앱의 Content Provider와 연결된 동기화 Adatper가 있음
- 사용자가 앱의 Notification을 클릭한 경우
Working Set
- 앱이 자주 실행 되지만 활성화 되지 않는 경우 Working Set에 존재함
- 앱이 간접적으로 사용되는 경우에도 Working Set 버킷으로 존재함
- 시스템은 작업을 실행하고 알람을 트리거하는 기능에 약간의 제한을 준다.
Frequent
- 시스템은 작업을 실행하고 알람을 트리거하는 기능에 강력한 제한을 준다.
Rare
- 시스템은 작업을 실행하고 알람을 트리거하는 기능에 엄격한 제한을 준다.
- 앱의 인터넷 연결 기능을 제한한다.
Restricted
- Android 12(API 31)에 추가됐으며 모든 버킷중 제한이 가장 높다.
- 시스템은 사용 패턴 외, 앱의 동작을 고려하여 앱을 제한된 버킷에 배치할지 여부를 결정함
- 앱이 시스템 리소스를 더 책임감 있게 사용하는 경우 앱이 해당 버킷에 배치될 가능성이 낮아진다.
- 사용자가 앱과 직접 상호작용 하는 경우 시스템은 덜 제한적인 버킷에 앱을 배치한다.
- 아래와 같은 제한 사항이 적용됨
- 하루에 10분간 주어지는 일괄 세션에서 딱 한 번 작업을 실행할 수 있다. 해당 세션 동안 시스템은 앱의 작업을 다른 앱의 작업과 그룹화 한다.
- WorkManager의 constraint가 잡힌 WokrRequest일 경우 실행되지 않는다. 다른 WorkRequest를 포함할 수 있는 동시에 실행 또는 보류 중인 다른 WorkReqeust가 하나 이상 있어야 한다.
- 시스템이 덜 제한적인 버킷에 앱을 배치할 때와 비교하여 더 적은 Expedited WorkRequest를 실행 할 수 있다.
- 앱은 하루에 하나의 Alram Manager에서 실행되는 Alram을 호출할 수 있다.
- 하루에 10분간 주어지는 일괄 세션에서 딱 한 번 작업을 실행할 수 있다. 해당 세션 동안 시스템은 앱의 작업을 다른 앱의 작업과 그룹화 한다.
다른 버킷과 달리 이러한 전원 관리 제한 사항은 기기가 충전중일 때도 Restricted Bucket에 적용되며, 장치가 충전 중 or 유휴 상태 or WIFI 연결 상태인 경우 제한이 느슨해 진다.
모범 사례
- 시스템을 조작하여 앱을 한 버킷 또는 다른 버킷에 넣으면 안됩니다.
- 앱의 우선순위가 높은 FCM을 수신할 때 Notification을 표시하지 않을 경우 사용자에게 앱과 상호작용할 기회를 제공하지 않으므로 앱을 Active Bucket으로 승격할 수 있다. 그러나, FCM 자체의 용도는 Notification을 통하여 사용자에게 Push 하는것이 목적이므로 이러한 상황을 만들어서는 안된다.
- 앱이 여러 패키지로 분할된 경우 각 패키지 별로 bucket의 수준이 다를 수 있다.
1. UsageStatsManager.getAppStandbyBucket() 호출하여 앱이 현재 버킷 확인
2. adb shell am get-standby-bucket PACKAGE_NAME- STANDBY_BUCKET_ACTIVE = 10
- STANDBY_BUCKET_WORKING_SET = 20
- STANDBY_BUCKET_FREQUENT = 30
- STANDBY_BUCKET_RARE = 40
- STANDBY_BUCKET_RESTRICTED = 45
'Android' 카테고리의 다른 글
Android Compose - Composable Component API Guideline (1) 2024.02.29 Android Compose - API GuideLine (0) 2024.02.28 Android - Safety Net API (에뮬레이터 감지 및 루팅 감지) (0) 2022.02.11 Component - Service (0) 2021.10.24 Component - Activity (0) 2021.10.01