[Android] 주요 4대 컴포넌트 - Service

H43RO·2021년 8월 26일
5

Android 와 친해지기

목록 보기
4/26
post-thumbnail

💡 Android 공식 문서를 참고하여 작성한 내용입니다
https://developer.android.com/guide/components/fundamentals#ActivatingComponents

2. Service

서비스는 화면에 보이지 않는 친구이다. 즉, 백그라운드에서 실행되는 컴포넌트이다. 따라서 사용자와 인터랙션을 하는 액티비티와 달리, UI 를 갖지 않는다. 우리가 음악 스트리밍 앱을 통해 음악을 들을 때, 해당 앱을 계속 켜놓는 경우는 없다. 왜냐하면 다른 앱을 켜도 음악이 안 멈추기 때문이다. 이러한 역할을 서비스가 수행하는 것이다. 마찬가지로 대용량 파일을 다운로드 받거나 데이터를 동기화하는 등 다양한 동작을 할 수 있다.

서비스는 크게 두 가지, 작게는 세 가지 유형이 존재한다.

  • Started Service
    • Foreground Service
    • Background Service
  • Bound Service

이들을 하나씩 알아보자.

Foreground Service

어느 정도는 사용자들에게 보여지는 작업을 수행한다. 예를들어 음악 스트리밍 앱이라면, 상단바를 내렸을 때 뮤직 컨트롤러와 음악 정보 등이 뜨는 기능에 해당된다.

🤚🏻 단, 한 가지 조건이 있다!

포그라운드 서비스는 Notification 을 계속해서 표시해야한다. 음악 앱의 뮤직 컨트롤러도 Notification 의 일종이다. 사용자에게 보여지는 부분이 있기 때문에, 시스템은 해당 서비스의 프로세스가 종료되지 않도록 많은 노력을 기울여야 한다.


Background Service

사용자들에게 보여지지 않는 작업을 수행한다. 용량이 큰 파일을 업로드 및 다운로드 받거나, 파일을 압축하는 등 사용자에게 보여질 필요가 없는 기능들에 이용한다. 사용자들이 눈으로 인식할 수 없는 작업이기 때문에 자유롭게 프로세스를 관리할 수 있다. 심지어 시스템 자원 (램) 이 부족할 경우 서비스를 종료하고 나중에 다시 재개해도 된다. 어차피 사용자는 신경 안 쓴다.

그런데 만약 앱이 API 26 이상을 대상으로 한다면, 운영체제 정책상 백그라운드 서비스 실행에 대한 제한이 적용된다. 시스템 자원 낭비 방지 차원이다. 이럴 경우 JobScheduler 라는 것을 사용하면 되는데, 추후 자세히 포스팅하겠다.


Bound Service

액티비티와 같은, '앱 주요 구성 요소'가 서비스에 바인딩된 형태이다. bindService() 를 사용하면 앱 구성 요소를 서비스에 바인딩할 수 있다. 바운딩된 서비스는 바인딩한 구성요소들이 해당 서비스와 상호작용하며 요청을 보내고 결과를 받을 수 있는 클라이언트-서버 구조를 제공한다. 또한, 아예 다른 프로세스가 바인딩되어 프로세스간 통신, IPC 을 수행할 수도 있다. 바인딩된 서비스는 무언가 바인딩되어 있을 때만 실행된다. 여러 컴포넌트가 한 서비스에 바인딩 될 순 있지만, 모든 바인딩이 해제되는 순간 해당 서비스도 종료된다.

하지만 이 세 가지가 완전히 분리된 개념은 절대 아니다. 예를 들어 Foreground 로도 쓰일 수도 있고, 바인드도 허용할 수 있는 것이다. 구현의 차이일 뿐이다.

⛔️ 전반적으로 주의해야할 점

서비스를 생성하면, 해당 서비스의 호스팅 프로세스의 기본 쓰레드 위에서 돌아가게 된다. 별도의 쓰레드를 만들지 않고, 별도의 프로세스에서 돌아가지도 않는다. 따라서 네트워킹, 음악 재생 등 블로킹 우려가 있는 작업을 수행하려면 서비스 내에 새로운 쓰레드를 생성하여 작업을 수행해야 한다. 이렇게 해야 기본 쓰레드 (메인 쓰레드) 가 액티비티 등을 통해서 사용자와 상호작용을 할 수 있다.

Service 세 줄 요약

  • 백그라운드 태스크를 수행하는 놈이다.
  • 보통 사용자와 상호작용을 하기보다는, 보여질 필요가 없는 동작을 수행한다.
  • Started Service (Foreground & Background), Bound Service 총 세 가지 종류가 있다.

다음 포스팅에선 'Broadcast Receiver' 에 대하여 알아보자.

profile
어려울수록 기본에 미치고 열광하라

0개의 댓글