Android 10 (API 레벨 29) 이상은 앱이 백그라운드에서 실행될 때 Activity를 시작할 수 있는 시점에 제한이 있습니다. 이 제한은 사용자에 대한 방해를 최소화하고 사용자가 화면에 표시되는 내용을 더욱 잘 제어할 수 있도록 합니다.
이 가이드는 백그라운드에서 Activity를 시작하는 대신 알림을 표시하는 방법을 제시합니다. 그런 다음에는 제한이 적용되지 않는 구체적인 사례에 대해 설명합니다.
알림으로 대신 표시
대부분의 경우, 백그라운드에서 실행되는 앱은 직접 Activity를 시작하지 않는 대신 시간에 민감한 알림을 표시하여 긴급한 정보를 사용자에게 전달합니다. 예를 들어 이런 알림은 걸려오는 전화나 활성화된 알람 시계를 처리하는 경우에 사용할 수 있습니다.
이 알림 시스템은 사용자에게 여러 가지 장점을 제공합니다.
- 사용자가 기기를 사용할 때 응답이 가능한 경고 알림이 표시됩니다. 사용자는 현재의 컨텍스트를 유지하면서도 화면에 보이는 콘텐츠를 관리할 수 있습니다.
- 시간에 민감한 알림은 사용자의 방해 금지 모드 규칙을 준수합니다. 예를 들어 사용자는 방해 금지 모드가 활성화되었을 때 특정 연락처 또는 반복적 발신자에게서 걸려온 전화만 허용할 수 있습니다.
- 기기 화면이 꺼져 있을 때는 전체 화면 인텐트가 즉시 시작됩니다.
- 기기의 설정 화면에서 사용자는 특정 알림 채널을 포함하여 어떤 앱이 최근에 알림을 보냈는지 확인할 수 있습니다. 이 화면에서 사용자는 알림 기본 설정을 관리할 수 있습니다.
제한에 대한 예외
Android 10 이상에서 실행되는 앱은 다음 조건 중 하나 이상을 충족했을 경우에만 Activity를 시작할 수 있습니다.
- 앱에 가시적 창이 있을 경우(예: 포그라운드에서 실행되는 Activity).
- 앱에 포그라운드 작업의 백 스택에 있는 Activity가 있을 경우.
앱에 최근 화면의 기존 작업 백 스택에 있는 Activity가 있을 경우.
가장 최근에 시작된 Activity가 앱에 있는 경우.
가장 최근에 앱이 Activity에 대해
finish()
를 호출한 경우. 이는finish()
가 호출된 시점에 Activity가 포그라운드에 있거나 포그라운드 작업의 백 스택에 있는 경우에만 적용됩니다.시스템에 바인딩된 서비스가 앱에 있는 경우. 이 조건은 다음과 같은 서비스에만 적용되며, UI를 실행해야 할 수 있습니다.
AccessibilityService
,AutofillService
,CallRedirectionService
,HostApduService
,InCallService
,TileService
,VoiceInteractionService
,VrListenerService
가 이에 해당합니다.다른 가시적 앱에 바인딩된 서비스가 앱에 있는 경우. 서비스에 바인딩된 앱이 백그라운드에 있는 앱에 대해 보이는 상태로 있어야 Activity를 성공적으로 시작할 수 있습니다.
앱이 시스템으로부터 알림
PendingIntent
를 수신하는 경우. 서비스 및 Broadcast Receiver에 대한 보류 인텐트의 경우, 보류 인텐트가 전송되고 몇 초 후에 앱이 Activity를 시작할 수 있습니다.앱이 다른 가시적 앱에서 전송된
PendingIntent
를 수신하는 경우.앱이 UI를 실행해야 하는 시스템 브로드캐스트를 수신하는 경우. 예를 들어
ACTION_NEW_OUTGOING_CALL
,SECRET_CODE_ACTION
등이 있습니다. 브로드캐스트가 전송되고 몇 초 후에 앱이 Activity를 시작할 수 있습니다.앱이
CompanionDeviceManager
API를 통해 부속 하드웨어 기기와 연결되는 경우. 이 API를 통해 앱은 사용자가 페어링된 기기에서 수행하는 작업에 대한 응답으로 작업을 시작할 수 있습니다.앱은 기기 소유자 모드에서 실행되는 기기 정책 컨트롤러입니다. 사용 사례의 예로는 완전 관리형 엔터프라이즈 기기, 전용 기기(예: 디지털 간판, 키오스크) 등이 있습니다.
이 앱은 사용자로부터
SYSTEM_ALERT_WINDOW
권한을 부여받았습니다.