Android 10 (API 수준 29) 이상에서는 앱이 백그라운드에서 실행될 때 앱이 활동을 시작할 수 있는 시점에 제한이 있습니다. 이 제한은 사용자에 대한 방해를 최소화하고 사용자가 화면에 표시되는 내용을 더욱 잘 제어할 수 있도록 합니다.
이 가이드는 백그라운드에서 활동을 시작하는 대신 알림을 표시하는 방법을 제시합니다. 제한이 적용되지 않는 구체적인 사례도 나와 있습니다.
알림으로 대신 표시
거의 모든 경우에 백그라운드의 앱은 활동을 직접 시작하는 대신 사용자에게 긴급한 정보를 제공하는 시간에 민감한 알림을 표시해야 합니다. 이러한 알림에는 걸려오는 전화나 활성화된 알람 시계를 처리하는 것이 포함됩니다.
이 알림 기반 알림 및 리마인더 시스템은 사용자에게 여러 가지 이점을 제공합니다.
- 사용자가 기기를 사용할 때 응답할 수 있는 헤드업 알림이 표시됩니다. 사용자는 현재 환경설정을 유지하고 화면에 표시되는 콘텐츠를 관리합니다.
- 시간에 민감한 알림은 사용자의 방해 금지 모드 규칙을 준수합니다. 예를 들어 사용자는 방해 금지 모드가 활성화되었을 때 특정 연락처 또는 반복적 발신자에게서 걸려온 전화만 허용할 수 있습니다.
- 기기 화면이 꺼져 있으면 전체 화면 인텐트가 즉시 실행됩니다.
- 기기의 설정 화면에서 사용자는 특정 알림 채널을 포함하여 최근에 알림을 보낸 앱을 확인할 수 있습니다. 이 화면에서 사용자는 알림 기본 설정을 관리할 수 있습니다.
앱이 활동을 시작할 수 있는 경우
Android 10 이상에서 실행되는 앱은 다음 조건 중 하나 이상에 해당할 경우에만 활동을 시작할 수 있습니다.
- 앱에 포그라운드의 활동과 같은 보이는 창이 있습니다.
- 앱의 포그라운드 작업 백 스택에 활동이 있습니다.
앱의 최근 화면에 있는 기존 작업의 백 스택에 활동이 있습니다.
가장 최근에 시작된 Activity가 앱에 있는 경우.
앱이 최근 활동에 관한
finish()
를 호출했습니다. 이는finish()
가 호출될 때 앱의 포그라운드에 활동이 있거나 포그라운드 작업 백 스택에 활동이 있는 경우에만 적용됩니다.시스템에 바인딩된 다음 서비스 중 하나가 앱에 있는 경우 이러한 서비스는 UI를 실행해야 할 수 있습니다.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(Android 14 (API 수준 34) 및 이후 버전에는 해당되지 않음)VoiceInteractionService
VrListenerService
.
다른 가시적 앱에 바인딩된 서비스가 앱에 있는 경우. 백그라운드의 앱이 활동을 성공적으로 시작하려면 서비스에 바인딩된 앱이 계속 표시되어야 합니다.
앱이 시스템에서
PendingIntent
알림을 수신합니다. 서비스 및 Broadcast Receiver에 대한 보류 인텐트의 경우, 보류 인텐트가 전송되고 몇 초 후에 앱이 Activity를 시작할 수 있습니다.앱이 다른 가시적 앱에서 전송된
PendingIntent
를 수신합니다.앱이 UI를 실행해야 하는 시스템 브로드캐스트를 수신하는 경우 이 함수의 예시는
ACTION_NEW_OUTGOING_CALL
및SECRET_CODE_ACTION
입니다. 브로드캐스트가 전송되고 몇 초 후에 앱이 Activity를 시작할 수 있습니다.앱이
CompanionDeviceManager
API를 통해 컴패니언 하드웨어 기기와 연결됩니다. 이 API를 사용하면 앱이 사용자가 페어링된 기기에서 수행하는 작업에 대한 응답으로 활동을 시작할 수 있습니다.앱이 기기 소유자 모드로 실행되는 기기 정책 컨트롤러입니다. 사용 사례로는 디지털 신호계와 키오스크와 같은 완전 관리형 엔터프라이즈 기기 및 전용 기기가 있습니다.
사용자가 앱에
SYSTEM_ALERT_WINDOW
권한을 부여했습니다.
PendingIntents에서 활동을 시작할 때 선택 필요
나열된 조건에 따라 의도치 않은 활동 시작을 허용하지 않도록 Android 14부터 활동 시작에 대한 앱 권한 부여를 선택하거나 선택 해제할 수 있는 명시적 API가 있습니다.
Android 15 이상을 타겟팅하는 앱은 기본적으로 더 이상 생성하는 PendingIntents
에 백그라운드 활동 실행 (BAL) 권한을 암시적으로 부여하지 않습니다. 명시적 선택이 필요합니다. 이렇게 하려면 앱이 PendingIntents
를 전송하는지 또는 만드는지에 따라 다음과 같은 옵션이 있습니다.
PendingIntent의 발신자
PendingIntent
를 시작하려는 Android 14 이상을 타겟팅하는 앱은 다음을 충족해야 합니다.
- 나열된 조건을 충족하고 또한
- 이러한 예외를 기반으로 백그라운드 활동 실행을 허용하도록 선택
이 선택은 앱 개발자가 앱이 Activity를 시작할 것임을 알고 있는 경우에 만 이루어져야 합니다.
선택하려면 앱에서 setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
가 포함된 ActivityOptions
번들을 PendingIntent.send()
또는 유사한 메서드에 전달해야 합니다.
PendingIntent의 크리에이터
PendingIntent
를 만드는 Android 15 이상을 타겟팅하는 앱은 이제 나열된 조건에 따라 이러한 PendingIntents
를 시작할 수 있도록 하려면 백그라운드 활동 실행을 허용하도록 명시적으로 선택해야 합니다.
대부분의 경우 PendingIntent
를 시작하는 앱이 선택해야 합니다.
그러나 만드는 앱에서 다음 권한을 부여해야 하는 경우:
PendingIntent
는 생성 앱이 표시되는 시점에 언제든지 시작할 수 있습니다.- 생성 앱에 특별 권한이 있는 경우 언제든지
PendingIntent
를 시작할 수 있습니다.
선택하려면 앱에서 setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
가 포함된 ActivityOptions
번들을 PendingIntent.getActivity()
또는 유사한 메서드에 전달해야 합니다.
자세한 내용은 관련 참조 문서를 참고하세요.
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode