Nuke Olaf - Log Store

[Android] 안드로이드 - 서비스 사용 예제 개념 참고 사이트 본문

Android

[Android] 안드로이드 - 서비스 사용 예제 개념 참고 사이트

NukeOlaf 2019. 12. 2. 12:44

https://mailmail.tistory.com/9

여기 코드 흐름이라던가 무척 잘 설명되어있음 보기좋음 굳

Service 사용에 있어서 기억해야할 내용은 다음과 같다

1. 서비스 라이프사이클

2. 단순 Service 에 대한 수행 처리 과정

3. 서비스 바운딩에 대한 Service 수행 처리 과정

4. 동시 수행 처리 과정

 

1. 서비스 라이프 사이클

왼쪽은 startService() 메서드를 통해 서비스를 수행, 오른쪽은 bindService() 메서드를 통해 서비스를 수행한다. 서비스를 시작할 때는 공통적으로 onCreate() 메서드가 호출된다. 서비스가 종료될때도 공통적으로 onDestroy() 메서드가 호출된다.

 

서비스는 타 컴포넌트(클라이언트) 와 연결되며 여러 클라이언트를 가질 수 있다. 또한 클라이언트는 특정 작업을 통해 서비스에게 데이터를 요청(서비스 객체, 멤버에 접근)할 수 있다. 그러나 startService() 를 통해 시작한 서비스 객체에는 다른 클라이언트들이 접근할 수 없다. 그렇다면 어떻게 해야 할까? bindService() 를 통해 서비스를 수행하여 서비스 객체에 접근하여야 한다.

위의 그림과 같이 액티비티1에서 startService() 호출 후, 액티비티2에서 bindService() 를 호출한 경우, 액티비티2에서는 서비스 바운딩을 동해 현재 실행중인 서비스 객체에 접근할 수 있다. 액티비티1에서도 startService() 호출 후 서비스 객체에 접근하기 위해 bindService() 를 호출할 수 있다. 이렇게 하나의 서비스에 대해 여러 서비스 바운딩이 이뤄진 경우 서비스가 종료되는 시점에 대해 어려움을 가질 수 있다. 단독으로 startService() 만 호출한 경우에는 stopService() 를 통해 서비스를 종료할 수 있지만, 어딘가에서 서비스 바운딩이 일어났을때는 바운딩이 끊어져야 서비스 종료가 가능해진다. 즉, 서비스 바운딩 중에 stopService() 를 호출해도 바운딩이 끊어질때까지 기다리며, 서비스 바운딩 중인 액티비티에서 바운딩이 끊어져야 비로소 서비스에서 onDestroy() 가 호출되며 서비스 수행이 종료된다. 또한, startService() 호출없이 bindService()만 호출해서 서비스를 시작할 수 있으며. unbindService() 를 호출하면 onDestroy() 가 호출됨과 동시에 서비스 수행이 종료된다.

 

Comments