🎈 안드로이드 서비스
오늘 알아볼 것은 안드로이드 서비스에서 주로 사용되는 세가지 시작 방법에 대한 정보입니다.
START_STICKY, START_NOT_STICKY, START_REDELIVER_INTENT가 있으며, 각각에 대해 자세히 알아보겠습니다.
✔️ START_STICKY
- 서비스가 강제로 종료되었을 때 시스템이 자동으로 다시 시작하도록 하는 방식입니다.
- 서비스가 다른 추가적인 작업 없이도 계속 실행되어야 하는 경우에 주로 사용됩니다.
- 시스템에 의해 재시작되면 onStartCommand()가 호출되지만 Intent는 Null이 전달됩니다.
✔️ START_NOT_STICKY
- 서비스가 강제로 종료되었을 때 시스템이 자동으로 다시 시작하지 않도록 하는 방식입니다.
- 이 방식은 서비스가 특정 작업을 완료한 후에는 더 이상 실행되지 않아도 되는 경우에 주로 사용됩니다.
- 시스템 자원 부족으로 서비스가 강제종료되어도 문제가 없는 경우에 사용됩니다.
✔️ START_REDELIVER_INTENT
- 서비스가 강제로 종료되었을 때 시스템이 자동으로 다시 시작하고, 마지막으로 전달된 Intent를 다시 전달해주는 방식입니다.
- 서비스가 실행 중인 작업을 반드시 완료해야 하는 경우에 주로 사용됩니다.
- 마지막으로 전달된 Intent가 다시 동일하게 전달되므로 취소된 작업을 이어서 수행할 수 있습니다.
- 하지만 그만큼 시스템 자원을 더 사용하기 때문에 필수적인 작업의 완료를 보장하고 싶을 때에만 사용해야 합니다.
✔️ 각 Flag 사용 예시
- START_STICKY
- 백그라운드 음악 재생 서비스: 백그라운드에서 계속 음악을 재생해야 합니다.
- 위치 정보 추적 서비스: 사용자의 위치 정보를 계속 추적해야 합니다.
- START_NOT_STICKY
- 파일 다운로드 서비스: 사용자가 요청한 파일을 다운로드한 후에는 서비스가 종료되어도 됩니다.
- 일회성 작업 수행 서비스: 일회성 작업 수행 후에는 서비스가 종료되어도 무관합니다.
- START_REDELIVER_INTENT
- 네트워크 요청 서비스: 서버 통신을 수행하는 경우, 네트워크 상태가 불안정하거나 실패했을 때에도 다시 시작해야 합니다. 이 때 마지막으로 전달한 Intent를 그대로 다시 전달받아 작업을 이어서 수행할 수 있도록 합니다.
- 긴 작업 수행 서비스: 작업 수행에 긴 시간이 소요되는 서비스에서는 해당 작업이 완료되지 않았을 경우에 작업을 다시 시작해야 합니다.
✔️ 각 Flag 두줄 요약
- START_STICKY
- 서비스가 지속적으로 실행되어야 할 경우에 적합합니다.
- 시스템에 의해 재시작되지만 Intent는 NULL이 전달됩니다.
- START_NOT_STICKY
- 서비스가 작업을 완료한 후 실행되지 않아도 되는 경우에 적합합니다.
- 시스템에 의해 재시작되지 않습니다.
- START_REDELIVER_INTENT
- 서비스가 실행 중인 작업을 반드시 완료해야 하는 경우에 적합합니다.
- 시스템에 의해 재시작되며, 마지막으로 전달했던 Intent를 전달합니다.
'개발 > Android' 카테고리의 다른 글
[안드로이드] ViewModel에서 context를 사용하는 방법 (1) | 2023.05.10 |
---|---|
[안드로이드] AAC ViewModel과 MVVM ViewModel (0) | 2023.03.26 |
[안드로이드] Glide를 알아보자 (0) | 2023.01.12 |
RxJava SubscribeOn & ObserveOn (0) | 2022.10.18 |
Repository 패턴을 사용하는 이유 (0) | 2022.09.07 |