본문 바로가기
Android/공부노트

[안기단] 2. Service

by ESHC 2022. 4. 12.

[안드로이드 초를 단히] 2. Service

안드로이드 구글 공식 문서를 공부하고 정리하는 글.

 

Service

백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않는다. 어플리케이션 구성 요소 중 하나인 서비스는 사용자가 다른 앱으로 전환하더라도 계속해서 실행될 수 있다. 서비스는 다른 구성 요소와 바인딩되어 상호작용할 수 있고, 프로레스 간 통신도 가능하다. 예를 들어 백그라운드에서 음악 재생이나 또 다른 애플리케이션 구성 요소인 Cotent Provider와 상호 작용 등의 작업을 수행할 수 있다.

 

서비스는 포그라운드(Foreground), 백그라운드(Background), 바인드(Bind, Bound)의 세 가지 유형이 있다.

 

포그라운드

반드시 알림을 통해 표시되어야 하는 포그라운드 서비스는 사용자가 보여지는 서비스이다. 음악 재생의 앱이 음악을 재생할 때 보여지는 모습이 포그라운드 서비스의 예시로 볼 수 있다. 

포그라운드로 실행중인 서비스

백그라운드

백그라운드 서비스는 사용자에게 직접 보이지 않는 작업을 수행한다. 

 

바인드

애플리케이션 구성 요소는 bindService()를 호출하여 해당 서비스에 바인딩되어 바인딩된 서비스와 상호작용하여 클라이언트-서버 인터페이스를 제공받을 수 있다. 바인딩 서비스는 여러 개의 애플리케이션 구성 요소에 동시에 바인딩될 수 있지만 모든 구성 요소가 바인딩을 해제하면 해당 서비스는 소멸된다.

 

모든 애플리케이션 구성 요소는 서비스를 사용할 수 있고 다른 애플리케이션이 서비스를 사용할 수도 있다. manifest에서 서비스를 비공개로 선언하면 다른 어플리케이션이 서비스를 사용하는 것을 차단할 수 있다. 

 

서비스는 자신의 호스팅 프로세스의 기본 스레드에서 실행되고, 기본적으로  자신의 스레드를 직접 생성하지는 않는다. ANR 오류가 발생할 수 있기 때문에 서브스 내에 새 스레드를 생성하여 이러한 에러의 위험을 줄이도록 하여야 한다.

 

onStartCommand()

다른 애플리케이션 구성 요소가 서비스를 시작하기 위해 요청하는 경우 onStartCommand가 호출된다. startService()를 호출하여 서비스를 시작할 수 있다. 해당 서비스의 작업이 완료되었을 때 stopSelf()또는 stopService()를 통해 서비스를 중단할 수 있다.

 

onBind()

해당 서비스에 다른 애플리케이션 구성 요소가 바인딩될 때 onBind가 호출된다. bindService()를 통해 바인딩되어질 수 있다. 바인딩되면 마치 서버와 클라이언트처럼 사용될 수 있으므로 클라이언트가 서비스와 통신을 주고받을 때 사용될 수 있는 인터페이스를 제공하여야 하고 이 때 IBinder를 반환하면 된다. 만약 바인딩을 허용하지 않을 땐 null을 반환하면 된다.

 

onCreate()

서비스가 처음 생성되었을 때 호출되는 메서드이다. 서비스가 이미 실행 중인 경우에는, 호출되지 않는다.

 

onDestroy()

서비스를 더 이상 사용하지 않고 소멸시킬 때 호출되는 메서드이다. 스레드 등의 각종 리소스를 정리하기 위해 이 메서드를 구현해야 한다.

 

서비스 수명주기

시스템이 서비스를 강제 중단하는 것은 메모리가 부족하여 사용자 포커스를 가진 액티비티를 위해 시스템 리소스를 확보하기 위한 경우이다. 사용자 포커스를 가지는 액티비티에 바인딩되어 있거나 포그라운드에서 실행되는 서비스의 경우에는 종료될 가능성이 희박한 것으로 이해할 수 있다. 서비스가 장시간 실행 중이라면 서비스는 종료될 가능성이 높아진다. 시스템에 의하 재시작을 염두하고 서비스를 설계하여야 한다. 

 

manifest

액티비티와 마찬가지로 manifest에 서비스와 그와 관련된 특정 속성을 선언해야 앱에서 서비스를 사용할 수 있다.  android:exported 를 통해 본인 앱에서만 사용 가능하도록 설정할 수 있다.

[출처]

https://developer.android.com/guide/components/services

 

서비스 개요  |  Android 개발자  |  Android Developers

서비스 개요 Service는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다. 다른 애플리케이션 구성 요소가 서비스를 시

developer.android.com

 

댓글