티스토리 뷰

 

8. Service 종류와 수명주기를 이해하자 



액티비티와 프래그먼트는 화면에 표시되는 동안은 생존하지만 표시되지 않게 되면면 onStop이나 onDestory가 호출되어 폐기될 가능성이 있습니다 

다른 앱의 액티비티가 최상위에 오는 경우에도 백그라운드에서 처리를 계속하고 싶을 때는 어떻게 하면 좋을까요? 백그라운드 처리를 위해 준비된 컴포넌트가 Service 입니다. Service는 UI 없이 백그라운드로 처리를 수행하는 컴포넌트 입니다. 


Service의 종류와 수명주기를 이해 하자 


Service는 크게 세 종류로 나눌 수 있습니니다. 

첫번째는 Context.startService() 를 호출해 시작되는 서비스 입니다.

두번째는 Context.bindService() 를 호출해서 Service에 바인드하는 경우 입니다.

세번째는 AIDL(Android Interface Definition Language) 안드로이드 인터페이스 정의 언어를 이용하는 서비스 입니다. (보통 soket 통신을 이용한 영상처리(C++) 을 사용) 


1. 백그라운드에서 동작하는 Service

2. Binder를 통해서 바인드하는 Service

3. AIDL로 앱을 연계할 수 있는 Service


AIDL로 앱끼리 연계할 때는 각각 Service로 실행되는 스레드가 다르다는 점에 주의할 필요가 있습니다. 이 경우 구현 난이도가 매우 높아집니다. 단순히

앱을 연계하고 싶을 때는 저번에 설명한 startActivityForResult() 이용하는 액티비티 연계로 대신할 수 없는지 검토해 보는 것이 좋습니다. 



수정주기와 콜백 


service 에도 수명주기가 있지만 UI가 없어서 단순 합니다. 




표 Service 수명주기에 따라 콜백되는 메서드


메서드명 

내용 

onCreate 

Service가 생성된 뒤에 콜백된다 

onStartCommand 

Service가 시작된 뒤에 콜백된다

onBind 

Context.bindService()를 통해 이 Service가 바인드되는 경우에 호출된다. 또한 바인드 후 서비스에 접속할 때는 ServiceConnection.onServiceConnected() 가 콜백된다.

onRebind 

이 Service가 언바인드된 다음, 다시 접속했을 때 콜백된다

onUnbind 

이 Service가 언바인드될 때 콜백된다 

onDestory 

Service가 폐기되기 직전에 콜백된다 



Service가 폐기되는 타이밍을 알아보자. 바인드된 경우는 바인드한 모든 클라이언트로부터 언바인드됐을 때 폐기 된다. 


Service가 바인드되지 않은 채 startService로 시작된 경우에는 명지적으로 Service.stopSelf()로 Service 자신이 스스로 종료하거나 다른 컴포넌트에서 Context.stopService()를 호출해 Service를 종료했을 뗴 폐기 됩니다.


마지막으로, 서비스가 바인드되고 startService로 시작된 경우는 모든 클라이언트로부터 언바인드되고 또한 명시적으로 Service.stopSelf()로 Service 자신이 스스로 종료하거나 다른 컴포넌트에서 Context.stopService()를 호출해 Service를 종료했을 때 폐기 됩니다. 




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함