Android Service


Android Service 사용자가 응용프로그램을 종료 하거나 다른 응용프로그램으로 전환을 하더라도 백그라운드(화면으로 보이지 않는 뒷단)에서 장시간 계속해서 동작하도록 제공하는 기능입니다. 또한 구성 요소를 서비스에 bind하여 서비스와 상호작용할 있으며 다른 프로세스간의 통신을 수행 수도 있습니다.


미디어플레이어, MP3 플레이어, 알람앱 등이 Android Service 이용한 App입니다.


Service Thread 아니며, 아래와 같이  가지 형식을 제공합니다.

 

Started Service (시작된 서비스)

Activity 또는 BroadCastReceiver 같은 다른 애플리케이션 요소들이 Context.startService() 함수를 호출 함으로써 시작되게 됩니다. Service 한번 시작되면 Service 중단되거나 리소스 해제를 위해 안드로이드 런타임 시스템에 의해 해제 되는 시점까지 백그라운드에서 무한정 실행됩니다. Service 자신을 실행시킨 애플리케이션이(우리가 일반적으로 이야기하는 App) 이상 포그라운드(사용자 입장에서 봤을 실행 - 화면을 있는 상태) 있지 않아도 백그라운드에서 실행되고 있습니다.

 

Service Context.stopService() 또는 stopSelf() 함수가 호출 되기 전까지 지속적으로 동작하게 됩니다.

Context.startService() 중복 호출의 결과로 여러 차례 호출 결과를 받게 되더라도 중복 Context.startService() 호출이 중첩되지 않아 Context.stopService() 또는 stopSelf() 한번이라도 호출 되면 Service 중단되게 됩니다.

 

Service 안드로이드 시스템에 의해 높은 우선순위가 부여되며 리소스 해제를 위해 종료될 때도 가장 마지막에 고려 대상이 됩니다.

 

Bound Service (바인드된 서비스)

애플리케이션의 구성 요소가 자신에게 바인드될 있도록 허용하는 서비스이며, bindService() 호출하여 오래 지속되는 연결을 생성합니다.

 

Started Service 유사하지만 Started Service 결과를 반환하지 않으며 자신을 호출한 컴포넌트와의 상호작용도 허용하지 않는 반면 Bound Service 자신을 호출한 컴포넌트와의 상호작용을 허용하고 결과를 받을 있습니다. , Activity Application 다른 구성요소에서 Service 상호작용하기를 원하는 경우 바인드된 서비스(Bound Service) 생성해야 합니다. Application 기능 가지를 프로세스 통신 (IPC : Interprocess Communication) 통해 다른 Application 노출하고자 하는 경우에도 좋은 선택입니다

 

클라이언트가 시작되어 bindService() 함수를 호출하면 Bound Service 바인딩 됩니다.

 

Bound Service onBind() 콜백 함수를 구현하여야 합니다. Service 최초 생성될 때와 이후에 다른 클라이언트들이 Service 바인딩 모두  onBind()  함수가 자동 호출됩니다. onBind() 함수의 목적은 바인딩한 클라이언트들에게 IBinder 타입의 객체를 반환하는 것입니다.

다시 정리 하자면 클라이언트와 Service 사이에서 쓰이는 인터페이스는 반드시 IBinder 타입의 객체의 구현이어야 하며 이를 서비스가 onBind() 콜백 메서드에서 반환해야 합니다. 클라이언트가 IBinder 수신하면 해당 인터페이스를 통해 서비스와 상호작용을 시작할 있습니다.

 

클라이언트는 바인드된 서비스를 이상 필요로 하지 않을 unbindService() 호출해야 합니다. 마지막 바인딩 클라이언트가 Service 에서 바인딩을 해제하면 안드로이드 런타임 시스템이 해당 Service 종료 시킵니다.

 

 

Service Lifecycle (서비스 생명주기)

Service 생명 주기는 Activity 생명 주기보다 훨씬 간단하지만 Service 생성하고 해제하는 방법에 특히 주의 해야 합니다. Service 사용자가 모르는 채로 백그라운드에서 실행될 있기 때문입니다.

 

Service Lifecycle  아래 이미지와 같이 서로 다른 가지 경로를 따를 있습니다. 왼쪽이 Serviced Service 이며 오른쪽이 Bound Service 입니다. 참고하세요.




1. Started Service (시작된 서비스)

다른 구성 요소가 startService() 호출하면 Service 생성됩니다. Service 무한정 실행 있으며 stopSelf() 호출하여 자체적으로 중단해야 합니다. 다른 구성 요소도 Context.stopService() 호출하여 Service 중단할 있습니다. 서비스가 중단되면 안드로이드 런타임 시스템이 이를 소멸 시킵니다.


2. Bound Service (바인드된 서비스)

클라이언트가 bindService() 호출하면 서비스가 생성됩니다. 클라이언트가 IBinder 인터페이스를 통해 서비스와 통신을 주고 받을 있으며 클라이언트가 연결을 종료하려면 unbindService() 호출하면 됩니다. 여러 클라이언트가 같은 Service 바인드될 있으며, 모두가 바인딩을 해제하면 시스템이 해당 서비스를 소멸시킵니다. (Started Service 달리 Service 스스로를 중단시키지 않아도 됩니다)

 

 

내용이 어렵게 느껴질 있겠는데요 ^^;

마지막 Service Lifecycle 부분이 Service 대한 요약이라 보시면 무방합니다.

 

 

 

Referenced By -

https://developer.android.com/reference/android/app/Service.html

https://www.tutorialspoint.com/android/android_services.htm

블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,