안드로이드의 백그라운드 서비스, 포그라운드 서비스 정책
안드로이드의 Service는 백그라운드에서 오래 실행되는 작업을 수행할수 있는 어플리케이션 구성요소입니다
별다른 사용자 인터페이스 없이 실행될수 있고, 사용자가 다른 앱을 실행하더라도 계속해서 실행된다는 점이 있습니다
이러한 서비스는
포그라운드(포어그라운드) 서비스와 백그라운드 서비스로 나뉘어집니다
포그라운드
사용자에게 잘 보이는 작업을 수행합니다
음악 스트리밍앱인경우 음악을 재생할때 포어그라운드 서비스를 사용합니다
포어그라운드는 반드시 알림을 표시해야합니다(푸시 알림 올때 바로 그 알림)
사용자가 앱과 상호작용을 하지않더라도 계속 실행됩니다
백그라운드
백그라운드 서비스는 사용자에게 직접 보이지 않는 작업을 수행합니다
안드로이드가 제공하는 백그라운드 서비스는 사용자에게 인터페이스없이 조용히~ 몰래~ 실행된다는점에서
여러모로 악용(?)되었던것이 사실입니다
백그라운드 프로세스에서 데이터를 계속해서 가져온다거나, 내부의 데이터를 계속 주기적으로 보낸다던가 그런것들을 말이죠
이렇게 백그라운드 프로세스에서 내가 원치 않는 작업들이 계속 동작하고 있는데
내가 설치하고 있는 앱 200개중에 150개가 백그라운드 프로세스가 돌아가고 있다면
배터리도 엄청 빨리 소모될것이 분명합니다.
그래서 안드로이드 8.0(API LEVEL 26) 부터는
앱이 포어그라운드 상태가 아닐때는 백그라운드에서 몰래 프로세스가 실행되지 못하도록 정책적인 변화가 생깁니다
사용자가 앱을 실행하고 해당 앱과 직접 상호작용을 하고 있다면(앱을 실행해서 스크롤을 내려 본다거나 터치를 해서 화면을 이동한다거나)
앱은 포그라운드 및 백그라운드 서비스를 자유롭게 생성하고 실행할수 있습니다
그리고 앱이 백그라운드로 이동하더라도 몇분정도의 기간동안은 여전히 허용됩니다만
이 짧은 시간이 끝나면 유휴상태로 간주되어 Service.stopSelf() 메소드를 호출한것처럼 시스템이 백그라운드 서비스를 중지시킵니다
이는 매우 긍정적인 변화라고 생각합니다
옛날같았으면 안드로이드를 오래 사용해서 수많은 앱을 설치해두게 되면 배터리 광탈이 점점 심각해집니다
이앱, 저앱 다 백그라운드프로세스에서 내가 알지 못하는 찜찜한(?) 작업을 계속 돌리니깐 배터리가 빨리 소모될수밖에요
그래서 백그라운드 실행을 막고, 포그라운드서비스라는 이름으로
반드시 사용자가 알수 있도록 알람을 띄워야만 특정 작업을 실행시킬수 있도록 하는 안드로이드의 정책적인 변화는 환영할만합니다.
아마도 여러분들은 게임앱에서 이러한 알림을 많이 보실수 있을텐데요
게임앱들은 보통 설치후에도 리소스설치라는 명목으로 적게는 몇백MB에서 많게는 몇GB까지 추가 다운로드를 요청합니다
이때 사용자가 리소스를 다운받는 동안에 굳이 화면을 켜고 멍하니 기다리지 않아도 되도록
앱이 백그라운드 상태가 되어도 다운로드가 계속 되도록 진행되는데
바로 이때 포그라운드서비스를 통해서 리소스를 계속적으로 다운받게 되는것입니다
그리고 이 포그라운드서비스는 반드시 알람을 실행시켜야 하기때문에
알림에서 다운로드중이라던가 또는 다른종류의 메시지를 볼수 있게 됩니다
앱이 백그라운드 상태여도 뭔가 실행하게 하기 위해서는 포어그라운드서비스를 사용하여 알림을 발생시키도록 강제하는 정책!
매우 좋아요