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

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

이 가이드에서는 백그라운드에서 활동을 시작하기 위한 대안으로 알림을 제시합니다. 또한 제한사항이 적용되지 않는 구체적인 사례도 나열됩니다.

알림으로 대신 표시

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

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

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

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

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

  • 앱에 가시적 창이 있을 경우(예: 포그라운드에서 실행되는 Activity).
  • 앱의 포그라운드 작업의 백 스택에 활동이 있습니다.
  • 앱의 최근 화면에서 기존 작업의 백 스택에 활동이 있습니다.

  • 앱에 아주 최근에 시작된 활동이 있습니다.

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

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

  • 앱에 표시되는 다른 앱에 의해 바인딩된 서비스가 있습니다. 서비스에 바인딩된 앱은 백그라운드에 있는 앱이 활동을 성공적으로 시작할 수 있도록 계속 표시되어야 합니다.

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

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

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

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

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

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

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

우발적인 활동이 나열된 연속을 기반으로 시작되는 것을 방지하기 위해 Android 14부터는 활동 시작에 관한 앱 권한 부여를 선택하거나 선택 해제할 수 있는 명시적 API가 있습니다.

다음을 참조하세요.

  • ActivityOptions.setPendingIntentBackgroundActivityStartMode
  • ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode

PendingIntent의 발신자에 의해

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

  • 나열된 행위를 이행하고
  • 이러한 예외에 따라 백그라운드 활동 실행을 허용하도록 선택

이러한 선택은 앱 개발자가 앱이 활동을 시작할 예정이라는 것을 알고 있는 경우에만 발생해야 합니다.

선택하려면 앱에서 setPendingIntentBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)가 포함된 ActivityOptions 번들을 PendingIntent.send(...) 또는 유사한 메서드에 전달해야 합니다.

PendingIntent 작성자에 의해 작성

Android 15 이상을 타겟팅하고 PendingIntent을 만드는 앱은 다음 요건을 충족해야 합니다.

  • 나열된 행위를 이행하고
  • 이러한 예외에 따라 백그라운드 활동 실행을 허용하도록 선택

대부분의 경우 PendingIntent를 시작하는 앱이 선택 앱이어야 합니다.

PendingIntent를 만드는 앱이 선택하면 다음과 같은 결과가 발생합니다.

  • PendingIntent는 생성 앱이 표시될 때마다 언제든지 시작할 수 있습니다.
  • 생성 앱에 특별한 권한이 있는 경우 언제든지 PendingIntent를 시작할 수 있습니다.

따라서 이러한 PendingIntent를 신뢰할 수 없는 앱에 전달하지 않고 더 이상 사용하지 않아야 할 때 PendingIntent를 취소하는 것이 좋습니다.

선택하려면 앱에서 setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)가 포함된 ActivityOptions 번들을 PendingIntent.getActivity(...) 또는 유사한 메서드에 전달해야 합니다.