안드로이드10을 대응하면서 숙지해야 하는 사항 중 하나인 백그라운드 제한에 관한 문서를 번역했습니다.
오역 및 의역이 있을 수 있으며 발견하신 오역이 있으시면 댓글로 남겨주시면 반영하여 수정하겠습니다.
원본글 : https://developer.android.com/guide/components/activities/background-starts
백그라운드에서 액티비티를 시작하는 것을 제한합니다(Restrictions on starting activities from the background)
안드로이드 10 (API level 29)와 그 이상 버전에서는 앱이 백그라운드에서 돌고 있을 때 액티비티를 실행하는 것을 제한합니다. 이 제한은 사용자가 자신의 화면에서 스스로 제어할 수 있게 함으로써 인터럽션을 최소화할 수 있게 하기 위함입니다.
Note: 액티비티를 시작하는 목적에 있어서 포그라운드로 서비스를 실행하는 것은 백그라운드라고 간주합니다.
이 가이드는 백그라운드에서 액티비티를 실행하는 것의 대안으로 notifiaction을 제안합니다. 그리고 나서 제한사항이 적용되지 않는 구체적인 케이스에 대한 목록을 정리했습니다.
알림을 대신 보여주세요
(Display notifications instead)
거의 모든 경우, 앱은 시간에 민감하고 중요한 정보를 사용자에게 제공하기 위해서 바로 액티비티를 실행해서 보여주는 대신에 time- sensitive 알림을 사용하는 것이 좋습니다.
전화가 오거나 알람이 울릴 때 같은 경우를 포함한 알람 사용의 예들
알림을 기반으로 한 알람과 리마인더 시스템이 사용자에게 제공하는 몇 가지 장점들:
- 디바이스를 사용할 때, 유저는 응답을 할 수 있게 해주는 heads-up notification를 보게 됩니다. 유저는 현재 그들의 상황을 유지하면서 화면에서 보이던 컨텐츠들을 제어할 수 있습니다.
- 시간에 민감한 알림들은 유저의 방해금지(Do Not Disturb) 규칙을 존중해야 합니다. 예를 들어 방해금지 상태이더라도 유저는 특정 연락처나, 여러번 걸려온 전화에 관해서는 허용할 수 있습니다.
- 기기의 스크린이 꺼졌을 때, 전체 화면 intent가 바로 실행됩니다.
- 설정 화면에서, 유저는 최근에 받은 알림을 확인할 수 있습니다. 구체적으로 어떤 채널에서 보냈는지도 확인할 수 있습니다. 이 화면에서 유저는 알림 설정을 제어할 수 있습니다.
제한의 예외사항들
(Exceptions to the restriction)
안드로이드10 버전과 그 이상의 버전에서 실행되는 액티비티들은 다음과 같은 조건을 하나 이상 충족시켰을 때 액티비티를 실행할 수 있습니다.
- 앱이 포그라운드 액티비티와 같은 보이는 윈도우를 가지고 있을 때.
- 액티비티가 포그라운드 작업의 백스택(back stack)으로 액티비티를 가지고 있을 때.
- 해당 앱이 최근 화면(Recents screen)에서 기존 작업의 백스택에 액티비티를 가지고 있을 때. 1
Note : 어떠한 앱이 새 액티비티를 실행하려고 시도할 때, 시스템은 그 액티비티를 실행중인 작업들 중에 가장 위로 배치합니다. 그렇지만 지금 보이는 작업에서 이동시키지는 않습니다. 유저가 앱의 작업으로 나중에 돌아왔을 때 시스템은 이전에 가장 위에 있었던 앱의 작업을 실행하는 대신 새 액티비티(실행하려고 시도했던 그 액티비티)를 시작합니다. - 앱이 최근에 시작했었던 액티비티를 가지고 있을 때.
- 앱이 아주 최근에 finish()를 호출했을 때. 이 적용은 앱이 다른 포그라운드 안에 액티비티를 가지고 있거나 포그라운드 작업의 백스택에서 finish()를 호출했을 때 적용됩니다.
- 이 앱이 시스템에 얽매인 서비스를 가진 경우. 이 조건은 다음과 같은 서비스에서만 적용됩니다.
AccessibilityService, AutofillService, CallRedirectionService, HostApduService, IncallService, TileService, VoiceInteractionService, 그리고 VrListenerService. - 앱이 지금 보이고 있는 다른 앱에 의해서 서비스에 얽매여(관련되어) 있을 때.
Note: 서비스에 관련되어 있는 앱은 백그라운드에서 액티비티를 성공적으로 실행하기 위해서 반드시 계속 보이는 상태로 유지되어야 합니다. - 앱이 시스템으로부터 PendingIntent 알림을 받았을 때. 서비스나 브로드캐스트 리시버를 위한 PendingIntent인 경우, 앱은 PendingIntent가 보내지고 몇 초 후에 액티비티를 시작할 수 있습니다.
- PendingIntent를 보여지고 있는 다른 앱에서 전달 받았을 때.
- 앱이 시스템 브로드캐스트를 받았을 때. 예를 들어 ACTION_NEW_OUTGOING_CALL과 SECRET_CODE_ACTION이다. 앱은 브로드캐스트가 보내지고 몇 초 뒤에 액티비티를 시작할 수 있습니다.
- 앱이 CompanionDeviceManagerAPI를 통해 companion hardware device와 관련이 있을 때, 이 API는 유저가 연결된 디바이스에서 한 액션에 응답해 액티비티를 실행할 수 있게 합니다.
- 앱이 device owner mode에서 실행 중인 device policy controller일 때. 예를 들어 디지털 사이니지나 키오스크 같은 전용 디바이스(fully managed enterprise devices, 2dedicated devices ) 등이 사용될 때이다. 3
- 앱이 SYSTEM_ALERT_WINDOW 권한 을 유저에 의해 받았을 때. 4
Note : 안드로이드 10(Go dedition)은 실행중인 앱에서 SYSTEM_ALERT_WINDOW 퍼미션을 받을 수 없다.