[Andorid] Services
Updated:
- 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 컴포넌트(인터페이스 X)
- 컴포넌트를 서비스에 바인드하여 서비스와 상호작용 가능, 프로세스 간 통신(IPC) 수행 가능
서비스의 두 가지 형식
- Started service
- 컴포넌트가
startService()
호출하여 시작 - 한 번 시작되면 백그라운드에서 무기한으로 실행 가능
- 서비스를 시작한 컴포넌트의 소멸에 관계 없음
- 작업이 완료되면
stopSelf()
를 호출하여 스스로 알아서 중단하는 것이 정상, 아니면 다른 구성 요소가stopService()
를 호출하여 중단
- 컴포넌트가
- Bound service
- 컴포넌트가
bindService()
호출하여 해당 서비스에 바인드(bind) onBind()
콜백 메서드를 구현하여 서비스와의 통신을 위한 인터페이스를 정의하는 IBinder를 반환- client-server 인터페이스 제공하여 컴포넌트-서비스 상호작용
- 클라이언트가 서비스와의 상호작용을 완료하면 이는
unbindService()
를 호출하여 바인딩을 해제
- 컴포넌트가
컴포넌트가 서비스 시작 : onStartCommand()
컴포넌트가 바인딩 허용 : onBind()
두 가지 의 큰 차이점은 서비스가 백그라운드에서 도는지(started) 다른 컴포넌트와 상호작용을 하는지(bound)의 여부:
check1 check2
ex) bound servive는 association/client/activity이 존재해야 사용가능. association 과 관계가 끊어지면 (종료하면) UI가 destroy되고 그것은 곳 bound service도 소멸되는 것. started service는 association의 destroy와 상관 없이 백그라운드에서 계속 실행됨. 서비스의 수행이 종료되면 자동 소멸.
Managing the lifecycle of a service
- 서비스의 전체 수명 주기
onCreate()
~onDestroy()
- 서비스의 활성 수명 주기는
onStartCommand()
또는onBind()
에 대한 호출로 시작- 각 메서드에 Intent가 전달되며 이것은 각각
startService()
또는bindService()
에 전달된 것
- 각 메서드에 Intent가 전달되며 이것은 각각
ref :
android developer docs - Services overview
all about service
started service vs bound service
Leave a comment