Nuke Olaf - Log Store
[Android] 안드로이드 - 포그라운드 서비스와 백그라운드 서비스의 차이 본문
포그라운드 서비스와 백그라운드 서비스의 차이를 알기 위해서는 우선 포그라운드 작업과 백그라운드 작업의 의미에 대해 알아야한다. 포그라운드 작업과 백그라운드 작업을 할 수 있게 해주는 것을 작업제어 도구라고도 부른다.
사용자는 터미널(안드로이드 단말기)에서 작업할 경우, 한 번에 하나의 프로세스만 실행할 수 있다. 즉, 사용자가 어떤 명령을 실행하면, 명령이 끝날 때까지 기다려야 다시 터미널을 사용할 수 있는 것이다. 그런데, 사용자가 어떤 프로세스를 실행하면서 동시에 다른 프로세스를 실행해야 할 때가 있다. 작업제어 도구는 이렇게 한 터미널에서 동시에 여러 프로세스를 실행하고 관리하기 위해 개발되었다.
이것은 Activity의 특징과도 관련이 있다. Activity는 한번에 하나 밖에 보여지지 않는다. 즉, 사용자는 안드로이드 기기 화면에서 하나의 Activity만을 통해 하나의 프로세스하고만 상호작용할 수 있는것이다. 그런데, 사용자가 어떤 프로세스를 실행하면서 동시에 다른 프로세스를 실행해야 할 때가 있다. 가장 많이 들어지는 예로는 음악 재생이 있다. (하도 많이 드는 예시라 질린다) 사용자는 카카오톡 앱을 통해 다른 사용자와 대화하면서 음악을 듣고 싶을 수 있을 것이다. 화면에 보여지는 카카오톡 프로세스 이외에도 동시에 음악이 재생되는 프로세스가 진행되어야 하는 필요성이 생겼다. 이러한 이유 때문에 포그라운드 작업과 백그라운드 작업이라는 개념이 탄생하게 된 것이다.
1. 포그라운드 작업
터미널에서 작업하는 경우, 일반적으로 사용자가 명령을 입력하면 셸(운영체제의 일부로서 컴퓨터의 메모리에 항상 떠있는 프로그램. 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있게 지시해준다)은 사용자가 입력한 명령을 해석하여 실행하고 그 결과를 화면에 출력해주는 대화식으로 작업을 수행다. 이렇게 사용자가 입력한 명령이 실행되어 결과가 출력될 떄까지 기다려야하는 포그라운드 방식으로 처리되는 프로세스를 포그라운드 프로세스라고 한다. 이를 작업제어에서는 포그라운드 작업이라고 한다.
포그라운드 작업은 일반적으로 사용자가 명령을 실행하는 방식이다. 프롬프트가 출력되지 않으면 다른 명령을 입력할수 없고 기다려야 한다. sleep 명령으로 주어진 시간만큼 프로세스의 실행을 지연하는 것도 포그라운드 작업의 예라고 생각할 수 있다.
2. 백그라운드 작업
포그라운드 작업은 명령을 한 번에 하나씩 실행하므로 동시에 여러개의 프로세스를 실행할 수 없다. 그러나 작업제어가 제공하는 백그라운드 기능을 사용하면 앞에서 프로세스가 실행되는 동안 뒤에서 다른 프로세스가 실행될 수 있으므로 한 터미널에서 여러개의 프로세스를 동시에 실행할 수 있다.
백그라운드 방식으로 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력된다. 그래서 사용자가 다른 작업을 계속할 수 있다. 필요한 여러작업을 백그라운드로 실행한 후, 터미널에서는 포그라운드 작업을 계속 진행할 수 있다. 이처럼 백그라운드 방식으로 처리되는 프로세스를 백그라운드 프로세스라고 하며, 작업제어에서는 백그라운드 작업이라고 한다. 백그라운드 작업은 명령의 실행시간이 많이 걸릴 것으로 예상되거나 명령을 실행한 후 다른 작업을 할 필요가 있을 때 많이 사용한다.
----------------------------------------------------------------------------------------------------------------
현재 Activity는 더 이상 화면에 보이지 않게 될 때 호출되는 메소드인 onStop() 이후, Destroy() 이전까지는 백그라운드로 실행된다.
백그라운드 서비스는 시스템이 리소스가 부족한 경우 os에서 임의로 중단할 수 있다.
안드로이드 8.0 오레오 버전부터는 백그라운드에서 실행되면서 앱의 동작을 제한하여 한정된 자원을 효율적으로 사용하기 시작했다. 보통 많은 수의 안드로이드 앱과 서비스를 동시에 시작할 수 있지만 동시에 실행되는 앱이 많을 수록 시스템에 더 많은 부하가 걸려서 사용자가 앱과 직접 상호작용하지 않을 때 앱이 수행할 수 있는 작업을 제한하는 것이다.
백그라운드 서비스 제한 : 앱이 유휴 상태인 경우 백그라운드 서비스의 사용이 제한됩니다. 이 기능은 사용자에게 잘 보이는 포그라운드 서비스에는 적용되지 않습니다.
브로드캐스트 제한 : 제한된 예외의 경우, 앱이 암시적 브로드캐스트에 등록하기 위해 자체 매니페스트를 사용할 수 없습니다. 그렇지만 여전히 앱이 런타임에 브로드캐스트에 등록할 수 있으며, 특정 앱을 대상으로 하는 명시적 브로드캐스트에 등록하기 위해 매니페스트를 사용할 수 있습니다.
< 안드로이드 앱에서의 포그라운드와 백그라운드 구분 >
앱이 포그라운드에 있는 경우
1. 액티비티가 시작되거나 일시중지되거나 상관없이 보이는 액티비티가 있는 경우
2. 포그라운드 서비스가 있는 경우
3. 앱의 서비스 중 하나에 바인드하거나 앱의 콘텐츠 제공자 중 하나를 사용하여 앱에 또 다른 포그라운드 앱이 연결된 경우
참고 사이트>
'Android' 카테고리의 다른 글
[Android] 안드로이드 - 카메라 예제 참고 사이트 (0) | 2019.12.06 |
---|---|
[Android] 안드로이드 - 내가 생각한 foreground/background service의 차이 (1) | 2019.12.06 |
[Android] 안드로이드 - 서비스와 다른 컴포넌트끼리의 통신 (0) | 2019.12.04 |
[Android] 안드로이드 - Alarm 알람기능 (1) | 2019.12.04 |
[Android] bindService 의 다양한 사용사례 (0) | 2019.12.04 |