안드로이드의 기본 구성 요소 중의 하나로서 UI 없이 백그라운드에서 실행되는 컴포넌트이다.
퀴즈 잠금화면 앱을 예로 들어보자.
스마트폰을 켰을 때 퀴즈화면이 나오도록 하는 서비스를 만들려면
앱이 종료되어 있어도 화면이 꺼질 때 브로드캐스트 메시지
를 수신하여 알려주어야 한다. 이런 역할을 서비스가 한다.
Context.startService()
함수로 서비스를 시작하면 시스템에 서비스 작업을 예약한다. 이렇게 실행된 서비스는 명시적으로 서비스를 중지할 때까지 계속 실행된다.bindService()
함수를 사용해 서비스가 제공하는 함수를 다른 앱들도 사용할 수 있게 한다.Service 객체
는 앱과 동일한 프로세스에서 실행된다.서비스 사용시 주의할 점은 최근에 배포되는 안드로이드 Oreo 버전부터 백그라운드 서비스에 제한이 생겼다는 점이다.
과거 안드로이드는 자유롭게 서비스를 실행하여 백그라운드에서 모든 작업을 할 수 있었지만 많은 앱들이 불필요하게 서비스
와 브로드캐스트 리시버
를 사용하면서 배터리가 너무 빨리 소모되는 등의 문제가 생겼다.
서비스는 UI가 없기 때문에** 사용자는 어떤 앱이 백그라운드에서 실행되고 배터리 소모를 일으키는지 쉽게 알 수가 없다.
구글은 이에 대한 해결책으로 안드로이드 Oreo 버전부터는 '백그라운드(Background) 서비스'가 계속 실행되지 않도록 제한을 추가하고, 만약 계속 실행되어야 하는 서비스는 '포그라운드(Foreground) 서비스'를 사용하도록 방침을 변경하였다.