CS/Android

Service (with. WorkManager, AlarmManager)

졔졔311 2025. 3. 4. 11:21
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의 종류

  1. Foreground Service
    1. Notification을 표시하며 실행
    2. 리소스 부족 시에도 강제 종료x
    3. startForeground(id, notification)을 호출해 실행
    4. ex) 음악 플레이어, 위치 추적 서비스(네비게이션 앱), 운동 기록 앱
  2. Background Service
    1. 알림(Notification)을 표시하지 않고 실행
    2. 일정 시간 후 자동 종료(Android 8.0 Oreo부터!) → 장시간 사용을 위해서는 Foreground Service 사용 필요
    3. ex) 서버에서 데이터 동기화, 일정 시간마다 백그라운드에서 실행 작업
  3. Bound Service
    1. Activity나 Fragment 등 클라이언트와 연결된 서비스
    2. bindService() 호출해 Service와 상호작용 가능
    3. onBind()를 구현해 클라이언트에 IBinder 제공 필요
    4. 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