안드로이드 포트폴리오 프로젝트 작업 중 앱의 실행 상태와 관계없이 항상 돌고 있어야 하는 기능이 있었는데, 알아보니 딱 포그라운드 서비스(Foreground Service)라는 걸 사용하면 됐다. 완전히 이해할 자신도 없고 작업에 흐름이 끊겨버릴 것 같아서 사용할 수 있을 만큼만 알아보고 구현했었다. 지금은 프로젝트 작업을 마무리했기 때문에 잘 모르고 지나갔던 서비스에 관해 알아보려 한다.
서비스라는 건 뭐지?
서비스는 어플리케이션의 4대 구성 요소이며, 사용자에게 따로 인터페이스를 제공하지 않고 오랫동안 실행되어야 하는 작업을 수행한다. 물론 자동으로 해주는 건 아니고 개발자가 수행해야 하는 작업을 지시한다.
서비스는 포그라운드(Foreground), 백그라운드(Background), 바인드(Bind)로 3가지가 존재한다. 다만, 이 중 '바인드'는 지식이 너무 얕아 따로 다루지 않겠다.
포그라운드 (Foreground)
https://developer.android.com/guide/components/foreground-services
포그라운드는 사용자에게 보이는 작업을 수행한다. (서비스 설명에는 인터페이스를 제공하지 않는다면서 왜죠) 이번 포트폴리오 프로젝트에선 사용자의 위치에 따라 앱의 실행 상태와 관계없이 수행되어야 하지만 기능의 수행을 사용자가 ON/OFF 할 수 있어야 했기 때문에 실행 중이라는 것을 사용자에게 시각적으로 제공해주기 위해 이 서비스를 사용했다. 이 외에는 흔히 음악 앱이나 타이머 등이 이에 속한다고 한다. 포그라운드는 서비스를 실행 중이라면 이를 사용자에게 시각적으로 알려줘야 하기 때문에 Notification으로 표시해야 한다. (어디선 필수라 그러고 어디선 아무 말 없어서 정확하게는 모르겠다. 실제로 나는 노티를 띄워 줄 필요가 없다고 생각해서 처음에는 표시시키지 않았었지만 서비스 실행에는 아무런 문제가 발생하지 않았었다.)
백그라운드 (Background)
https://developer.android.com/guide/background
백그라운드는 포그라운드와 반대로 사용자에게 보이지 않는 작업들을 수행한다. 바꿔 말하면 굳이 사용자에게 서비스 상태를 시각적으로 보여주지 않아도 되는 일을 수행한다는 말이다. 나는 상식적으로 '사용자 눈에 보이지 않는 작업은 백그라운드 작업'이라고 알고 있었는데, 안드로이드에선 '포그라운드'라는 서비스가 추가로 존재했다. 그래서 처음에는 내게 필요한 서비스가 막연히 '백그라운드 서비스'로 생각하고 있었는데 알아보니 '포그라운드 서비스'가 내게 필요한 기능이었다. (Foreground Service와 다르게 Background Service가 아닌 Background Work이라고 표현하더라) 백그라운드 서비스는 이미지 로드, 저장소 액세스, 네트워크 통신 등에 사용된다고 한다.
또한, 포그라운드와 다르게 백그라운드는 실행 상태를 시각적으로 사용자에게 제공하지 않는데, 이로 인해 백그라운드 작업 중인 어플리케이션이 리소스를 너무 많이 사용하면 사용자가 모바일 기기를 사용함에 있어 불편함이 생길 수 있기 때문에 조심해야 하며, 이런 이유로 API26부터는 여러 가지 제약을 걸었고 사용할 영역도 줄어들었다고 한다. (쉽게 말해서 내가 작업하라고 시킨 것도 아닌데 웹서핑을 하거나 게임을 하는데 백그라운드 작업이 렉을 발생시키면 나는 영문도 모른 채 버벅거리는 불편함이 생긴다는 것)
https://developer.android.com/guide/components/services?hl=ko
'Android (Kotlin)' 카테고리의 다른 글
[Android/안드로이드] 위치 서비스(GPS) 기능 설정 팝업 (2) | 2022.08.26 |
---|---|
[Android/안드로이드] 프래그먼트(Fragment)가 뭐지? (0) | 2022.08.23 |
[Android/안드로이드] 카카오맵 API를 사용해보자 (Kakao Map API) (0) | 2022.08.17 |
[Android/안드로이드] Context는 대체 뭐지? (0) | 2022.08.16 |
[Android/안드로이드] 어플리케이션 4대 컴포넌트 (앱 구성 요소) (0) | 2022.08.14 |
최근댓글