본문 바로가기

Interview

Android: Service란 무엇인가 그리고 생명주기는?

Service는 안드로이드 Application을 구성하는 4가지 컴포넌트 중에 하나이며, Background(화면뒷단)에서 동작하는 컴포넌트이다.


Activity가 종료되어 있는 상태에서도 동작하기 위해서 만들어진 컴포넌트이며 mp3 플레이어 같이 화면이 종료되도 계속 재생될 때 사용이 필요하다.


Service는 기본적으로 UI가 동작하는 main thread에서 동작한다. 그래서 Service 내에서 별도의 Thread를 생성해서 작업을 수행해야 한다.




onStartCommand 와 onBind 로 나뉘게 된다.


onStartCommand의 경우

- 액티비티 같은 앱 컴포넌트가 startService()를 호출하면, 서비스는 실행되면(started), 그 서비스를 실행한 컴포넌트가 종료되도 할 일을 모두 마칠 때까지 서비스는 종료되지 않는다. 


- 따라서 서비스가 할일을 다하여 종료시키고 싶다면, 서비스 내에서 stopSelf()를 호출하여 스스로 종료되도록 하거나, 다른 컴포넌트에서 stopService()를 호출하여 종료시켜한다.


- 액티비티 등의 앱 컴포넌트는 startService()를 호출함으로써 서비스를 실행할 수 있고, 이때 어떤 서비스를 실행할지에 대한 정보와 그 외에 서비스에 전달해야할 데이터를 담고 있는 인텐트를 인자로 넘길 수 있습니다. 그리고 서비스의 onStartCommand() 콜백 메소드에서 매개변수로 그 인텐트를 받게 됩니다.


onBind의 경우

- startService() 메소드 대신 bindService() 메소드를 통해 시작되는 서비스를 서비스 바인딩 (Service Bind 혹은 Bound Service) 라 한다.


- 마치 클라이언트-서버 와 같이 동작을 하는데 서비스가 서버 역할을 한다. 

(액티비티는 서비스에게 어떠한 요청을 할 수 있고, 서비스로부터 요청에 대한 결과를 받을수 있음)


- 하나의 서비스에 다수의 액티비티 연결 가능하며, 서비스 바인딩은 연결된 액티비티가 사라지면 서비스도 소멸된다. (즉 백그라운드에서 무한히 실행되지는 않음)


- 클라이언트가 서비스와의 접속을 마치려면 unbindService() 를 호출한다.


결론: 서비스가 돌아가는 동안 지속적으로 액티비티와 커뮤니케이션 하기 위해 사용



'Interview' 카테고리의 다른 글

Android: Life cycle, 생명주기란?  (0) 2018.03.12