Service (1)
Service?
사용자 인터페이스(GUI) 없이 background 에서 동작하는 component
(Android 4대 component : Activity, Service, Broadcast receiver, Contents provider)
Background 때문에 혼동할 수 있지만 사실 service 는 main thread 에서 동작한다!!
왜?
1. Activity 가 종료되어 있는 상태에서도 동작한다.
: Activity 에서 thread 사용 시 별도의 종료가 없다면 activity 가 종료되어도 thread 는 계속 동작한다.
하지만, activity 가 종료되면 activity 의 생명주기에 맞춰 thread 도 종료 시켜주는게 바람직하다.
즉, 앱이 종료되어도 thread 가 동작해야 한다면 바로 service 를 이용해야 한다.
2. 앱이 구동 중 종료되어도 강제 종료된 service 를 다시 시작하게 할 수 있다. (옵션에 따름)
: 1번의 연장선에서 thread 를 사용한다면 앱 구동 중 강제 종료 시 다시 시작할 수 없지만 service 는 옵션에
따라 시스템이 다시 시작하게 할 수 있다.
3. 다른 process(package) 에 있는 특정 함수를 호출하거나 callback 을 받고 싶을 때 사용할 수 있다.
: IPC (Interprocess Communication)
종류
1. 시작타입 서비스 (started service)
: startService() 호출, 한 번 시작되면 background 에서 무기한 실행되만, 보통 한 작업을 수행하고 서비스가
종료된다. 호출한 곳에 결과값을 반환하지 않는다.
2. 연결타입 서비스 (bound service)
: bindService() 호출, client - server 구조로 동작한다. (양방향 작업이 가능하다.)
Activity 가 종료되면 service 도 소멸되며 하나의 service 에 여러 activity 가 연결 가능하다.
Life cycle
onCreate
- 서비스가 처음 초기화 될때 실행
- 최초 한번만 호출됨
■ 시작타입 서비스 (started service)
onStartCommand
- 서비스가 호출될 때마다 실행
- 동작 모드 (return 값)
START_STICKY : 시스템에 의해 종료되어도 리소스가 여유로워지면 다시 서비스 시작
START_NOT_STICKY : 시스템에 의해 종료되어도 다시 서비스 안 됨
START_REDELIVER_INTENT : START_STICKY 와 비슷하며, Intent 값까지 모두 요주시켜 줌
■ 연결타입 서비스 (bound service)
onBind
- 바인딩을 허용하는지 확인 후, 허용한다면 서비스와 컴포넌트 사이의 통신에 필요한 IBinder 를 반환.
onUnBind
- 서비스와 컴포넌트의 바인딩 해제
return true : 새로운 컴포넌트가 서비스에 바인드될 때 onRebind() 호출
return false : 새로운 컴포넌트가 서비스에 바인드될 때 onBind() 호출
onDestory
- 서비스가 종료될 때 실행