[android] background, Foreground service

남윤희·2024년 1월 4일

android

목록 보기
1/2
post-thumbnail

전에 안드로이드 4대 컴포넌트 라는 것을 알아본 적이 있다. 거기에서 나오는 개념 들 중 몇개를 포스팅 해보고자 한다.

background service?

화면에 앱이 실행되고 있지 않아도 계속 유지되는 서비스.

  • 앱이 화면에 없어도 음악을 계속 듣거나 스트리밍이 지속되거나 다운로드 받거나 등.


애플리케이션의 백그라운드에서 작업이 필요할 경우 방법을 결정하는 방법이다.

  • 작업을 즉시 완료해야 한다면 DownloadManager, Foreground service.
  • 작업을 정확한 시간에 완료해야 하는 경우에는 AlarmManager.를 사용

대부분의 백그라운드 처리는 WorkManger로 작업예약하는데,

위와 같이 액세스한다.

Immediate (즉시 실행해야 하는 작업)

사용자가 특정 범위를 벗어나거나 상호작용을 완료할 때 종료해야 하는 작업에는 ViewModel과 함께 Kotlin 코루틴을 사용하도록 권장하고 있다.

사용자가 애플리케이션을 백그라운드로 전환하거나 기기를 다시 시작하더라도 즉시 실행해야 하며 지속적인 처리가 필요한 작업의 경우 WorkManager와 장기 실행 작업 지원 기능을 사용하는 것이 좋다.

미디어 재생 또는 활성 탐색과 같은 특정한 경우에는 포그라운드 서비스를 직접 사용하는 것이 좋다.

Exact

알람앱같이 정확한 시간에 유저에게 메세지를 보내주어야 한다면 우리는 AlarmManager를 사용할 수 있다.

서비스의 사용 예제는
서비스 공식문서
Midium블로그
에서 확인 할 수 있다.

Foreground Service?

구글 공식문서에는

Foreground services perform operations that are noticeable to the user.
포그라운드 서비스는 사용자에게 눈에 띄는 작업을 수행합니다.

라고 쓰여있다.

그리고 Android 14 (API 수준 34)부터 포그라운드 서비스를 실행하면 시스템에서 서비스 유형에 따라 특정 기본 요건을 확인한다.
예를 들어 location 유형의 포그라운드 서비스를 실행하려고 하면 시스템은 앱에 이미 ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION 권한이 있는지 확인하고 그렇지 않으면 시스템에서 SecurityException이 발생한다고 적혀있다.

포그라운드(foreground) 에는 어떤 특징이 있을까?

  • 포그라운드는 사용자가 인지할 수 있는 작업을 수행한다.
  • 포그라운드 서비스를 실행하기 위해서는 상태바 알림을 꼭 띄어야만 한다.
  • 백그라운드와는 다르게 메모리 부족 시에도 시스템에서 강제로 서비스를 종료하지 않는다.

백그라운드(Background)와의 차이점은

  • 백그라운드는 사용자에게 직접적으로 보이지 않는 작업을 수행한다.
  • 메모리 부족 시 서비스가 강제 종료된다는 단점이 있다.

주의사항은 서비스가 더 이상 필요하지 않은 경우, stopForeground와 stopService를 사용하여 중지해야 한다.
포그라운드 공식문서
참고예제1
참고예제2

profile
안드로이드 주니어 개발자

0개의 댓글