티스토리 뷰
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를 종료했을 때 폐기 됩니다.
'android' 카테고리의 다른 글
10.IntentService를 활용하자 (0) | 2018.05.26 |
---|---|
9. 상주 서비스를 만들자 (0) | 2018.05.23 |
7. LocalBroadcastReceiver 를 이해하자 (0) | 2018.05.20 |
6. BroadcastReceiver로 브로드캐스트 이벤트를 수신하자 (0) | 2018.05.20 |
5. UI를 갖지 않는 프래그먼트를 이용하자 (0) | 2018.05.20 |