안드로이드 10(API 레벨 29) 이상에서는 앱이 백그라운드에서 실행 중에 액티비티를 시작할 수 있을 때 제한이 적용된다. 이는 사용자에 대한 방해를 최소화하고 사용자가 화면에 표시되는 내용을 더욱 잘 제어할 수 있도록 한다.
액티비티를 시작하기 위해 포그라운드 서비스를 실행하는 앱은 여전히 백그라운드에 있는 것으로 간주된다.
알림을 대신 표시
대부분의 경우 백그라운드에 있는 앱은 액티비티를 직접 시작하지 않고 시간에 민감한 알림을 표시하여 긴급한 정보를 사용자에게 전달한다. 이런 알림은 예를 들어 걸려오는 전화 및 활성 상태인 알람 시계를 처리하는 경우에 사용한다.
이 시스템은 사용자에게 여러 가지 이점을 제공한다.
- 디바이스를 사용할 때 사용자가 응답할 수 있는 알림이 표시된다. 사용자는 현재 컨텍스트를 유지하고 화면으로 보이는 컨텐츠를 제어할 수 있다.
- 시간에 민감한 알림은 사용자가 설정한 방해 금지 모드 규칙에 따른다. 예를 들어 사용자는 방해 금지 모드가 설정되어 있을 때 특정한 연락처 또는 반복적으로 걸려온 전화만 허용할 수 있다.
- 디바이스의 화면이 꺼져 있을 때 전체 화면 인텐트가 즉시 실행된다.
- 디바이스의 설정 화면에서 특정 알림 채널을 포함하여 어떤 앱이 최근에 알림을 보냈는지 볼 수 있다. 이 화면에서 사용자는 알림 설정을 관리할 수 있다.
제한에 대한 예외
안드로이드 10 이상 버전에서 실행되는 앱은 이하 조건 중 1개 이상을 만족할 때만 액티비티를 시작할 수 있다.
- 앱이 눈에 보이는 창(포그라운드에 있는 액티비티와 같은)을 가지고 있다.
- 앱이 포그라운드 태스크의 백스택에 있는 액티비티를 가지고 있다.
- 앱이 최근 앱 화면의 기존 태스크의 백스택에 있는 액티비티를 가지고 있다.
이러한 앱이 새 액티비티를 시작하려 하면 시스템은 해당 액티비티를 앱의 기존 태스크의 꼭대기로 이동시키지만 현재 표시 중인 태스크에서 이탈하지는 않는다. 나중에 사용자가 앱의 태스크로 돌아오면 시스템은 앱의 태스크의 꼭대기에 있던 액티비티 대신 새 액티비티를 시작한다. - 앱이 매우 최근에 시작된 액티비티를 가지고 있다.
- 앱이 매우 최근에 액티비티의
finish()
를 호출한다. 이는finish()
가 호출된 시점에 포그라운드에 있거나 포그라운드 태스크의 백스택에 있는 액티비티에게만 적용된다. - 앱이 시스템에 바인딩된 서비스를 가지고 있다. 이 조건은 다음 서비스에만 적용되며 UI를 실행해야 한다.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
VoiceInteractionService
VrListenerService
- 앱이 다른 보이는 앱에 바인딩된 서비스를 가지고 있다. 서비스에 바인딩된 앱은 백그라운드에 있는 앱에 대해 보이는 상태를 유지해야 성공적으로 액티비티를 시작할 수 있다.
- 앱이 시스템으로부터 알림 펜딩 인텐트를 수신한다. 서비스와 브로드캐스트 리시버에 대한 펜딩 인텐트의 경우 앱은 펜딩 인텐트가 전송되고 몇 초 후 액티비티를 시작할 수 있다.
- 앱이 다른 보이는 앱에서 전송된 펜딩 인텐트를 수신한다.
- 앱이 UI를 실행해야 하는 시스템 브로드캐스트를 수신한다. 예를 들어
ACTION_NEW_OUTGOING_CALL
과SECRET_CODE_ACTION
이 있다. 앱은 브로드캐스트가 전송되고 몇 초 후 액티비티를 시작할 수 있다. - 앱이
CompanionDeviceManager
를 통해 부속 하드웨어 디바이스와 연결되어 있다. 이 API를 사용하면 사용자가 페어링된 디바이스로 수행하는 액션에 반응하여 앱이 액티비티를 시작할 수 있다. - 앱이 디바이스 소유자 모드에서 실행되는 디바이스 정책 관리자이다.
- 사용자가 앱에게
SYSTEM_ALERT_WINDOW
권한을 승인했다.
'Android' 카테고리의 다른 글
벨소리 재생하기 (0) | 2022.07.19 |
---|---|
Chronometer와 RecyclerView로 스톱워치 만들기 (0) | 2022.07.09 |
액티비티 (8) : 최근 사용한 앱 화면 (0) | 2022.05.13 |
액티비티 (7) : Parcelable과 Bundle (0) | 2022.05.13 |
액티비티 (6) : 프로세스와 앱 수명 주기 (0) | 2022.05.12 |