Android 16 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion
과 관계없이 Android 16에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.
또한 Android 16을 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.
핵심 기능
Android 16에는 Android 시스템의 다양한 핵심 기능을 수정하거나 확장하는 다음과 같은 변경사항이 포함되어 있습니다.
JobScheduler 할당량 최적화
Starting in Android 16, we're adjusting regular and expedited job execution runtime quota based on the following factors:
- Which app standby bucket the application is in: in Android 16, active standby buckets will start being enforced by a generous runtime quota.
- If the job starts execution while the app is in a top state: in Android 16, Jobs started while the app is visible to the user and continues after the app becomes invisible, will adhere to the job runtime quota.
- If the job is executing while running a Foreground Service: in Android 16, jobs that are executing while concurrently with a foreground service will adhere to the job runtime quota. If you're leveraging jobs for user initiated data transfer, consider using user initiated data transfer jobs instead.
This change impacts tasks scheduled using WorkManager, JobScheduler, and
DownloadManager. To debug why a job was stopped, we recommend logging why your
job was stopped by calling WorkInfo.getStopReason()
(for
JobScheduler jobs, call JobParameters.getStopReason()
).
For more information on battery-optimal best practices, refer to guidance on optimize battery use for task scheduling APIs.
We also recommend leveraging the new
JobScheduler#getPendingJobReasonsHistory
API introduced in
Android 16 to understand why a job has not executed.
Testing
To test your app's behavior, you can enable override of certain job quota optimizations as long as the app is running on an Android 16 device.
To disable enforcement of "top state will adhere to job runtime quota", run the
following adb
command:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
To disable enforcement of "jobs that are executing while concurrently with a
foreground service will adhere to the job runtime quota", run the following
adb
command:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
To test certain app standby bucket behavior, you can set the app standby bucket
of your app using the following adb
command:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
To understand the app standby bucket your app is in, you can get the app standby
bucket of your app using the following adb
command:
adb shell am get-standby-bucket APP_PACKAGE_NAME
JobInfo#setImportantWhileForeground를 완전히 지원 중단했습니다.
JobInfo.Builder#setImportantWhileForeground(boolean)
方法用于在调度应用位于前台或暂时豁免于后台限制时指示作业的优先级。
自 Android 12(API 级别 31)起,此方法已废弃。从 Android 16 开始,它不再有效,系统会忽略调用此方法。
此功能移除也适用于 JobInfo#isImportantWhileForeground()
。从 Android 16 开始,如果调用该方法,该方法会返回 false
。
사용자 환경 및 시스템 UI
Android 16에는 더 일관되고 직관적인 사용자 환경을 제공하기 위한 다음과 같은 변경사항이 포함되어 있습니다.
방해가 되는 접근성 안내 지원 중단
Android 16에서는 announceForAccessibility
사용 또는 TYPE_ANNOUNCEMENT
접근성 이벤트 전송으로 특징되는 접근성 공지사항을 지원 중단합니다. 이로 인해 TalkBack 및 Android의 스크린 리더 사용자에게 일관되지 않은 사용자 환경이 발생할 수 있으며, 대안은 다양한 Android의 보조 기술에서 더 광범위한 사용자 요구사항을 충족합니다.
대안의 예:
- 창 변경과 같은 중요한 UI 변경의 경우
Activity.setTitle(CharSequence)
및setAccessibilityPaneTitle(java.lang.CharSequence)
를 사용하세요. Compose에서Modifier.semantics { paneTitle = "paneTitle" }
를 사용합니다. - 중요한 UI 변경사항을 사용자에게 알리려면
setAccessibilityLiveRegion(int)
를 사용하세요. Compose에서는Modifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
를 사용합니다 . 뷰가 업데이트될 때마다 공지사항이 생성될 수 있으므로 이러한 공지사항은 가급적 사용하지 않는 것이 좋습니다. - 사용자에게 오류를 알리려면
AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
유형의AccessibilityEvent
를 전송하고AccessibilityNodeInfo#setError(CharSequence)
를 설정하거나TextView#setError(CharSequence)
를 사용하세요.
지원 중단된 announceForAccessibility
API의 참조 문서에는 추천 대안에 관한 자세한 내용이 포함되어 있습니다.