서비스

1 minute read

안드로이드 개발을 공부하며 서비스를 처음 마주했을 때 느낀 당황함은 적지 않았다. 액티비티와 프래그먼트만 다루고 있었는데, 눈에 보이지도 않는 것이 생명 주기는 액티비티에 종속돼있지 않으면서도 일을 할 수 있다는 것이 참 낯설었다. 지금까지 이해한 서비스의 개념을 정리하고자 한다.

서비스란?

서비스는 백그라운드에서 오래 실행되는 작업을 위한 앱 구성 요소다. 액티비티와 달리 눈에 보이지 않으며, 독립적인 생명 주기를 가진다. 다른 앱 구성 요소(액티비티 등)에서 서비스를 시작할 수 있으며, 사용자가 다른 앱으로 전환하더라도 서비스는 백그라운드에서 계속 실행된다.

서비스의 유형

포그라운드

포그라운드 서비스는 사용자에게 보이는 서비스다. 예를 들어, 유튜브 뮤직 등 음악 재생 앱의 경우 음악 재생 정보와 컨트롤러를 사용자에게 알림으로 표시하는데, 이것은 포그라운드 서비스다.

picture 17
등산 중 정보가 표시되는 알림

이번에 개발한 앱 ‘등산왕’에서는 사용자에게 실시간으로 등산 기록 정보를 노출해야 했기 때문에 포그라운드 서비스에서 알림을 생성하는 방식을 택했다.
포그라운드 서비스는 백그라운드 서비스에 비해 메모리 부족 시 종료될 확률이 낮아진다.

백그라운드

백그라운드 서비스는 사용자에게 보이지 않는 작업을 수행한다. API 레벨 26 이상을 타겟으로 한 경우 백그라운드 서비스 실행에 제한이 있다. 그러므로 AlarmManager나 WorkManager를 사용해 지연된 작업을 처리하는 것이 권장된다.

바인드

앱 구성 요소가 bindService()를 호출해 서비스와 바인딩되면 그것이 바인드 서비스다. 포그라운드 또는 백그라운드 서비스 모두 바인드 서비스가 될 수 있다. 바인딩된 서비스는 구성 요소와 상호작용하고 결과를 받을 수 있다.

생명 주기

picture 18
서비스의 생명 주기

위 사진은 서비스 생명 주기에 따른 콜백 함수를 보여준다.

참고

서비스 공식 문서

Comments