📚 Types of Services
- Started Service:
Foreground
, Background
- BoundService:
Bound
1. Foreground
- 안드로이드 앱의 실행 중에 사용자와 직접적으로 상호작용할 수 있는 상태
- 사용자가 앱을 실행하고 앱의 화면이 보이는 상태
- 사용자는 앱과의 상호작용을 통해 앱의 기능을 사용하고 데이터를 입력하거나 출력할 수 있음
- ex. 안드로이드의 Notification을 사용하여 다운로드가 되는 상황을 알림에 progress와 함께 보여주거나 음악앱의 현재 플레이백 상태를 알림과 함께 업데이트 해주곤 합
2. Background
- 포그라운드가 아닌 상태로, 앱이 백그라운드에 있을 때는 사용자와 직접적으로 상호작용할 수 없음
- 백그라운드에서도 앱이 일부 동작을 수행할 수 있음
- ex. 백그라운드에서 푸시 알림을 수신하거나 데이터를 업데이트하는 등의 작업을 할 수 있음
- 백그라운드에서 실행되지만 유저에게 특별히 진행상황이나 결과에 대한 메세지를 전달할 필요가 없는 경우에 쓰임
- API26부터는 백그라운드 서비에서 여러가지 제약이 걸림
- 백그라운드에서 돌고있는 앱이 시스템의 리소스를 많이 잡아먹으면 유저가 다른 앱을 사용하고 있을 때도 좋지못한 사용자 경험을 제공할 수 있기 때문
- 그렇기 때문에 Background Service를 사용할 수 있는(굳이 사용할 필요가 없어서) 영역이 더욱 줄어들었음
3. Bound
- 안드로이드에서 서비스와 액티비티 간에 바인딩을 통해 서로 상호작용하는 방식
- 액티비티와 특정 서비스를 연결하여 서비스의 메서드를 호출하거나 데이터를 주고받을 수 있게 함
- 액티비티가 소멸되면 함께 소멸되는 것이 일반적!
- 액티비티와 바인딩된 서비스는 서로 생명 주기를 공유하게 됨
➕ Stages of Bound Service
1) 서비스 생성 및 바인딩
- 액티비티에서 서비스를 생성하고 바인딩하는 작업을 수행함
- 서비스와 액티비티가 서로를 인식하고 연결됨
2) 바인딩 확인
- 서비스가 바인딩되면, 서비스의
Binder
객체를 통해 액티비티에서 서비스의 메서드를 호출할 수 있음
- 이를 통해 액티비티와 서비스가 서로 상호작용할 수 있게 됨
3) 작업 수행
- 액티비티에서 바인딩된 서비스의 메서드를 호출하여 원하는 작업을 수행하고, 결과를 받아올 수 있음
- ex. 음악 앱에서 음악 재생을 제어하거나, 데이터베이스 작업을 수행하는 등의 작업이 가능함
4) 바인딩 해제
- 작업이 완료되면, 액티비티에서 서비스와의 바인딩을 해제해야 함
- 이렇게 하면 더 이상 서비스와의 상호작용이 이루어지지 않음
[참고 사이트]
'안드로이드, 어디까지 아세요 [2.1] — background task, Service, Foreground Service', Medium
'Services overview', developer