-
Android Background LimitsAndroid/Component 2019. 7. 25. 15:25
안드로이드 8.0에서 부터 Background에 대해서 제약을 가하기 시작하였다.
BroadcastReceiver 제약
Service 제약
이 두가지에 대하여 어떤 제약이 가해졌는지에 대해서 알아보도록 하자
BroadcastReceiver 제약
- 내부 app의 receiver를 암시적 intent에 의해 실행시키는 것을 금지
- 명시적 intent에 의한 실행은 이전과 동일하게 잘 수행된다.
- receiver가 특정 component의 코드에서 intent filter로 등록시키고 암시적 intent에 의해 실행되는건 잘 된다.
- manifest 파일에 static하게 등록 된 receiver를 암시적을 실행시키는 것이 금지.
- 물론 외부 앱의 receiver인 경우 암시적 intent 실행은 잘 된다.위에 5개의 규악이 대략적인 제약이라고 한다.
개발자들이 내부 App의 Receiver를 암시적으로 자꾸 호출하여 사용해서 제약을 걸었다고 한다
내부 Application의 Receiver는 명시적 Intent에 의해 실행 시키고
외부 Application의 Receiver는 암시적 Intent에 의해 실행 시키도록 하자.
Service 제약
Service가 Foreground 상태에 있어야지만 정상적으로 실행이 된다.Foreground service란 service를 구동한 app이 화면에 출력이 되어 있는 상태를 지칭 한다.
대표적인 Foreground 상태로는
- 동일 앱 내에서 서비스를 구동시킨 activitiy가 살아 있는 경우
- bindService에 의해 서비스를 실행시킨 앱이 정상적으로 실행되고 있는 상태
Ex ) B앱의 BindService가 A Service를 실행 시켰을때
- 화면이 나오지 않는 상태 : Background
- 외부앱에 의해서 서비스가 실행되는 경우 : Foreground
- Service의 실행 정보가 Notification에 의해 화면에 출력되고 있는 상태
- 다른앱의 BroadcastReceiver가 내 앱의 Service를 구동 하였을때 : Background
- 다른앱의 BroadcastReceiver가 내 앱의 Service를 구동 했을때 Notification이 출력되어 있는 경우 : Foreground
대표적인 백그라운드 상태로는
- 사용자 화면과 상관없이 receiver 등에 의해 service가 구동이 되는 상황 대표적인 사례가 Boot Complete등 이다.
화면을 띄우지 않고 서비스를 실행시켰을때 : 백그라운드- 이때는 서비스를 startForgroundService()로 실행시키면 된다.
단, 이 함수는 26에서 추가된 함수임으로 하위호환성을 고려해서 작성해야 한다.
- 하지만 ( 1 ~ 2초 ) startForegroundService에 의해 실행된 service는 빠른시간내에 startForeground 함수를 호출해 주어야 한다.
startForegroundService 가능 여부
StartService Same app 명시적 O 암시적 X Other app 명시적 암시적 X BindService Same app 명시적 O 암시적 X Other app 명시적 암시적 O
결론은
- 동일 앱의 암시적 Intent에 의한 서비스 실행은 금지
- 외부 앱의 경우 실행은 꼭 package 명을 명시해야 한다.
- 외부 앱의 경우 startService은 앱의 프롯스가 살아 있는 경우에만 실행된다.
- bindService의 경우는 외부앱의 프로세스가 실행상태가 아니라고 하더라도 잘 실행된다.- bindService에 의한 서비스 실행은 foreground service로 본다.
'Android > Component' 카테고리의 다른 글
Android Notification (0) 2019.07.25 Android JobSchduler (0) 2019.07.25 Android Component - Service (0) 2019.07.24 Android Component - Broadcast Service (0) 2019.07.24