ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android Standby Bucket
    Android 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을 호출할 수 있다.

    다른 버킷과 달리 이러한 전원 관리 제한 사항은 기기가 충전중일 때도 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
Designed by Tistory.