티스토리 뷰

안녕하세요, 오늘은 안드로이드 4대 컴포넌트 중 하나인 "서비스"에 대해서 정리해보려고 합니다.


글 작성에 앞서, 

1. 서비스 정의

2. 서비스 유형

3. 서비스 구현을 위해 알아야 하는 필수 사항

4. 메니페스트(Manifest) 서비스 선언 

이 순서로  정리해보겠습니다.


1. 서비스 정의

백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소 입니다. 사용자 인터페이스(UI)를 제공하지 않습니다. 다른 애플리케이션에서도 서비스를 시작할 수 있으며, 다른 애플리케이션으로 전환 하더라도 백그라운드에서 계속해서 실행할 수 있습니다. 또한, 구성 요소를 서비스에 바인딩하여 서비스와 상호작용할 수 있으며, 프로세스 간 통신(IPC)도 수행할 수 있습니다. 


예시 상황

1) 네트워크 트랜잭션을 처리

2) 음악을 재생

3) 파일 I/O를 수행


2. 서비스 유형

1) 포그라운드 (Foreground)

포그라운드 서비스(Foreground Service)용자에게 잘 보이는 몇몇 작업을 수행합니다. 예를 들어, 오디오 트랙을 재생할 때 포그라운드 서비스를 사용합니다.


2) 백그라운드 (Background) 

백그라운드 서비스는 사용자에게 직접 보이지 않는 작업을 수행합니다. 예를 들어, 파일 다운받는 것 입니다.


3) 바인드 (Bind)

  • 애플리케이션 구성 요소가 bindService() 를 호출 -> 해당 서비스에 바인딩 되면 서비스가 바인딩 
  • 바인딩된 서비스는 클라이언트-서버 인터페이스를 제공
  • 구성 요소가 서비스와 상호작용하게 하며, 결과를 받을 수도 있고 심지어 이와 같은 작업을 여러 프로세스에 걸쳐 프로세스 간 통신(IPC)으로 수행할 수도 있습니다. 
  • 바인딩된 서비스는 다른 애플리케이션 구성 요소가 이에 바인딩 되어 있는 경우에만 실행됩니다. 여러 개의 구성 요소가 서비스에 한꺼번에 바인딩될 수 있지만, 이 모든 것에서 바인딩이 해제되면 해당 서비스는 소멸됩니다.


3. 서비스 구현을 위해 알아야 하는 필수 사항
서비스를 생성하려면 Service 의 하위 클래스(또는 이것의 기존 하위 클래스 중 하나)를 생성해야 됩니다


< 필수 함수 >

1) onStartCommand()

  • 시스템이 이 메서드를 호출하는 것은 또 다른 구성 요소(예: 액티비티)가 서비스를 시작하도록 요청하는 경우에 사용.
  • 이 메서드가 실행되면 서비스가 시작되고 백그라운드에서 무한히 실행될 수 있음

2) onBind()

  • 시스템은 다른 구성 요소가 해당 서비스에 바인딩 되고자 하는 경우(예를 들어 RPC를 수행하기 위해)에도 이 메서드를 호출한다.

  • 이 메서드를 구현할 때에는 클라이언트가 서비스와 통신을 주고받기 위해 사용할 인터페이스를 제공해야 합니다. 

  • 이 메서드는 항상 구현해야 하지만, 바인딩을 허용하지 않으려면 null을 반환해야 합니다.


3) onCreate()

  • 시스템은 서비스가 처음 생성 되었을 때, 이 메서드를 호출하여 일회성 설정 절차를 수행합니다. 서비스가 이미 실행 중인 경우, 이 메서드는 호출되지 않습니다.
  • 서비스가 onStartCommand() 또는 onBind()를 호출하기 전에 실행하는 메소드  


4) onDestory()

시스템이 이 메서드를 호출하는 것은 서비스를 더 이상 사용하지 않고 소멸시킬 때 사용. 서비스는 스레드, 등록된 리스너 또는 수신기 등의 각종 리소스를 정리하는 경우 호출합니다. 


4. 메니페스트 선언

마지막 서비스를 사용하기 위한 필수 사항입니다. 코드는 잘 구현했지만 메니페스트에 서비스 선언을 안하시면 기능이 잘 작동하지 않으니까 꼭 까먹지 마세요!!!!


<application> 요소의 하위에 추가하시면 됩니다.

<manifest ... >
  ...
 
<application ... >
     
<service android:name=".ExampleService" />
      ...
 
</application>



감사합니다. 


댓글