백그라운드에서 활동 시작에 관한 제한사항

Android 10 (API 수준 29) 이상에서는 앱이 백그라운드에서 실행될 때 앱이 활동을 시작할 수 있는 시점에 제한이 있습니다. 이 제한은 사용자에 대한 방해를 최소화하고 사용자가 화면에 표시되는 내용을 더욱 잘 제어할 수 있도록 합니다.

이 가이드는 백그라운드에서 활동을 시작하는 대신 알림을 표시하는 방법을 제시합니다. 제한이 적용되지 않는 구체적인 사례도 나와 있습니다.

알림으로 대신 표시

거의 모든 경우에 백그라운드의 앱은 활동을 직접 시작하는 대신 사용자에게 긴급한 정보를 제공하는 시간에 민감한 알림을 표시해야 합니다. 이러한 알림에는 걸려오는 전화나 활성화된 알람 시계를 처리하는 것이 포함됩니다.

이 알림 기반 알림 및 리마인더 시스템은 사용자에게 여러 가지 이점을 제공합니다.

  • 사용자가 기기를 사용할 때 응답할 수 있는 헤드업 알림이 표시됩니다. 사용자는 현재 환경설정을 유지하고 화면에 표시되는 콘텐츠를 관리합니다.
  • 시간에 민감한 알림은 사용자의 방해 금지 모드 규칙을 준수합니다. 예를 들어 사용자는 방해 금지 모드가 활성화되었을 때 특정 연락처 또는 반복적 발신자에게서 걸려온 전화만 허용할 수 있습니다.
  • 기기 화면이 꺼져 있으면 전체 화면 인텐트가 즉시 실행됩니다.
  • 기기의 설정 화면에서 사용자는 특정 알림 채널을 포함하여 최근에 알림을 보낸 앱을 확인할 수 있습니다. 이 화면에서 사용자는 알림 기본 설정을 관리할 수 있습니다.

앱이 활동을 시작할 수 있는 경우

Android 10 이상에서 실행되는 앱은 다음 조건 중 하나 이상이 충족될 때 활동을 시작할 수 있습니다.

  • 앱에 포그라운드의 활동과 같은 보이는 창이 있습니다.
  • 앱의 포그라운드 작업 백 스택에 활동이 있습니다.
  • 앱의 최근 화면에 있는 기존 작업의 백 스택에 활동이 있습니다.

  • 가장 최근에 시작된 Activity가 앱에 있는 경우.

  • 앱이 아주 최근에 활동에서 finish()를 호출했습니다. 이는 finish()가 호출되었을 때 앱의 포그라운드에 활동이 있거나 포그라운드 작업의 백 스택에 활동이 있는 경우에만 적용됩니다.

  • 시스템에 바인딩된 다음 서비스 중 하나가 앱에 있는 경우 이러한 서비스는 UI를 실행해야 할 수 있습니다.

  • 다른 가시적 앱에 바인딩된 서비스가 앱에 있는 경우. 백그라운드의 앱이 활동을 성공적으로 시작하려면 서비스에 바인딩된 앱이 계속 표시되어야 합니다.

  • 앱이 시스템에서 PendingIntent 알림을 수신합니다. 서비스 및 broadcast receiver의 대기 중인 인텐트의 경우 앱은 대기 중인 인텐트가 전송된 후 몇 초 동안 활동을 시작할 수 있습니다.

  • 앱이 다른 가시적 앱에서 전송된 PendingIntent를 수신합니다.

  • 앱이 UI를 실행해야 하는 시스템 브로드캐스트를 수신합니다. 이 함수의 예시는 ACTION_NEW_OUTGOING_CALLSECRET_CODE_ACTION입니다. 브로드캐스트가 전송되고 몇 초 후에 앱이 Activity를 시작할 수 있습니다.

  • 앱이 CompanionDeviceManager API를 통해 컴패니언 하드웨어 기기와 연결됩니다. 이 API를 사용하면 앱이 사용자가 페어링된 기기에서 수행하는 작업에 대한 응답으로 활동을 시작할 수 있습니다.

  • 앱이 기기 소유자 모드로 실행되는 기기 정책 컨트롤러입니다. 사용 사례로는 디지털 신호계와 키오스크와 같은 완전 관리형 엔터프라이즈 기기전용 기기가 있습니다.

  • 사용자가 앱에 SYSTEM_ALERT_WINDOW 권한을 부여했습니다.

PendingIntents에서 활동을 시작할 때 선택 필요

나열된 조건에 따라 의도치 않은 활동 시작을 허용하지 않도록 Android 14부터 활동 시작에 대한 앱 권한 부여를 선택하거나 선택 해제할 수 있는 명시적 API가 있습니다.

Android 15 이상을 타겟팅하는 앱은 기본적으로 더 이상 생성하는 PendingIntents에 백그라운드 활동 실행 (BAL) 권한을 암시적으로 부여하지 않습니다. 명시적 선택이 필요합니다. 이렇게 하려면 앱이 PendingIntents를 전송하는지 또는 만드는지에 따라 다음과 같은 옵션이 있습니다.

대기 중인 인텐트 표
그림 1: 백그라운드 활동 실행을 위한 결정 흐름

PendingIntent의 발신자

PendingIntent를 시작하려는 Android 14 이상을 타겟팅하는 앱은 다음을 충족해야 합니다.

  • 나열된 조건을 충족하고 또한
  • 이러한 예외를 기반으로 백그라운드 활동 실행을 허용하도록 선택

이 선택은 앱 개발자가 앱이 활동을 시작한다는 것을 아는 경우에만 발생합니다.

선택하려면 앱에서 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() 또는 유사한 메서드에 전달해야 합니다.

자세한 내용은 관련 참조 문서를 확인하세요.