728x90
반응형
Service란?
- 백그라운드에서 실행되는 UI 없이 실행되는 Android 컴포넌트
- 이 Service를 상속받아 새로운 서비스를 만듦
- ex) customercenter - 공지사항 앱
Service의 특징
- Activity와 달리 UI 제공x
- 사용자가 앱을 종료해도 특정 작업을 유지할 수 있도록 백그라운드 실행 가능
- 기본적으로 main thread에서 실행(ANR 발생 가능) → 장시간 실행되는 작업은 Thread나 Coroutine을 사용하는 것이 좋음
- Foreground Service로 실행하면 앱이 종료돼도 계속 실행 가능
- 배터리 소모를 줄이기 위해 서비스를 사용한 후에는 stopSelf()나 stopService()를 호출해 반드시 정리 필요
Service의 생명주기
- onCreate() : 서비스가 처음 생성될 때 호출
- onStartCommand() : startService()가 호출될 때 실행
- onBind() : bindService()가 호출될 때 실행
- onUnbind() : unbindService()가 호출될 때 실행
- onDestroy() : 서비스가 종료될 때 호출
Service의 종류
- Foreground Service
- Notification을 표시하며 실행
- 리소스 부족 시에도 강제 종료x
- startForeground(id, notification)을 호출해 실행
- ex) 음악 플레이어, 위치 추적 서비스(네비게이션 앱), 운동 기록 앱
- Background Service
- 알림(Notification)을 표시하지 않고 실행
- 일정 시간 후 자동 종료(Android 8.0 Oreo부터!) → 장시간 사용을 위해서는 Foreground Service 사용 필요
- ex) 서버에서 데이터 동기화, 일정 시간마다 백그라운드에서 실행 작업
- Bound Service
- Activity나 Fragment 등 클라이언트와 연결된 서비스
- bindService() 호출해 Service와 상호작용 가능
- onBind()를 구현해 클라이언트에 IBinder 제공 필요
- ex) Activity에서 Service의 method를 직접 호출하고 싶을 때,
음악 앱에서 UI와 음악 재생 상태를 동기화할 때
요즘은 Background Service보다는 Foreground Service나 WorkManager를 주로 사용함.
WorkManager?
- 안드로이드의 백그라운드 작업 처리 라이브러리
- 지속적인 작업(Background Task)을 안전하게 실행하도록 도와주는 컴포넌트
- Service 대신 장기 실행 작업에 적합
- 특징
- Reliable : OS가 앱을 종료해도 작업 유지
- Flexible : 네트워크 상태나 배터리 수준 등을 고려해 유연한 실행 가능
- 네트워크 연결 상태, 충전 중 상태 등 일정 조건에서만 실행하고 싶을 때 사용
- 딜레이가 있는 백그라운드 작업 수행
→ 즉각적인 실행이 필요하면 Coroutine, Service, AlarmManager 등 사용
- Persistent : 앱이 재부팅되거나 충돌해도 작업 다시 실행 가능
AlarmManager?
- 정해진 시간에 특정 작업을 실행하도록 예약하는 시스템 서비스
- 앱이 종료되어도 실행되므로 백그라운드에서 특정 작업을 실행할 때 유용
=> 그러나 백그라운드 제한으로, 백그라운드 작업은 WorkManager 추천 - ex) 일정 시간이 지나면 알람 울리기,
하루 한 번 특정 작업 실행하기(데이터 동기화 등),
기기 재부팅 후 특정 작업 다시 예약하기
728x90
반응형
'CS > Android' 카테고리의 다른 글
Compose의 표준 레이아웃 요소 - Column, Row, Box (0) | 2025.03.05 |
---|---|
Intent (2) | 2025.03.04 |
Component (1) | 2025.02.28 |
Android Studio build 방법 - Make Project (Ctrl+F9)와 Build APK(s) (0) | 2025.02.25 |
Retrofit (1) | 2025.02.16 |