반응형

안드로이드 포트폴리오 프로젝트 작업 중 앱의 실행 상태와 관계없이 항상 돌고 있어야 하는 기능이 있었는데, 알아보니 딱 포그라운드 서비스(Foreground Service)라는 걸 사용하면 됐다. 완전히 이해할 자신도 없고 작업에 흐름이 끊겨버릴 것 같아서 사용할 수 있을 만큼만 알아보고 구현했었다. 지금은 프로젝트 작업을 마무리했기 때문에 잘 모르고 지나갔던 서비스에 관해 알아보려 한다.



서비스라는 건 뭐지?

서비스는 어플리케이션의 4대 구성 요소이며, 사용자에게 따로 인터페이스를 제공하지 않고 오랫동안 실행되어야 하는 작업을 수행한다. 물론 자동으로 해주는 건 아니고 개발자가 수행해야 하는 작업을 지시한다.

서비스는 포그라운드(Foreground), 백그라운드(Background), 바인드(Bind)로 3가지가 존재한다. 다만, 이 중 '바인드'는 지식이 너무 얕아 따로 다루지 않겠다.

 

 


포그라운드 (Foreground)

https://developer.android.com/guide/components/foreground-services

 

Foreground services  |  Android Developers

Foreground services Foreground services perform operations that are noticeable to the user. Foreground services show a status bar notification, so that users are actively aware that your app is performing a task in the foreground and is consuming system re

developer.android.com

포그라운드는 사용자에게 보이는 작업을 수행한다. (서비스 설명에는 인터페이스를 제공하지 않는다면서 왜죠) 이번 포트폴리오 프로젝트에선 사용자의 위치에 따라 앱의 실행 상태와 관계없이 수행되어야 하지만 기능의 수행을 사용자가 ON/OFF 할 수 있어야 했기 때문에 실행 중이라는 것을 사용자에게 시각적으로 제공해주기 위해 이 서비스를 사용했다. 이 외에는 흔히 음악 앱이나 타이머 등이 이에 속한다고 한다. 포그라운드는 서비스를 실행 중이라면 이를 사용자에게 시각적으로 알려줘야 하기 때문에 Notification으로 표시해야 한다. (어디선 필수라 그러고 어디선 아무 말 없어서 정확하게는 모르겠다. 실제로 나는 노티를 띄워 줄 필요가 없다고 생각해서 처음에는 표시시키지 않았었지만 서비스 실행에는 아무런 문제가 발생하지 않았었다.)

 

 


백그라운드 (Background)

https://developer.android.com/guide/background

 

백그라운드 처리 가이드  |  Android 개발자  |  Android Developers

백그라운드 처리 가이드 백그라운드 데이터 처리는 사용자의 기대에 부응하고 사용자에게 도움이 되는 Android 애플리케이션을 개발하는 데 있어 중요한 부분입니다. 이 가이드에서는 백그라운

developer.android.com

백그라운드는 포그라운드와 반대로 사용자에게 보이지 않는 작업들을 수행한다. 바꿔 말하면 굳이 사용자에게 서비스 상태를 시각적으로 보여주지 않아도 되는 일을 수행한다는 말이다. 나는 상식적으로 '사용자 눈에 보이지 않는 작업은 백그라운드 작업'이라고 알고 있었는데, 안드로이드에선 '포그라운드'라는 서비스가 추가로 존재했다. 그래서 처음에는 내게 필요한 서비스가 막연히 '백그라운드 서비스'로 생각하고 있었는데 알아보니 '포그라운드 서비스'가 내게 필요한 기능이었다. (Foreground Service와 다르게 Background Service가 아닌 Background Work이라고 표현하더라) 백그라운드 서비스는 이미지 로드, 저장소 액세스, 네트워크 통신 등에 사용된다고 한다. 

 

 

또한, 포그라운드와 다르게 백그라운드는 실행 상태를 시각적으로 사용자에게 제공하지 않는데, 이로 인해 백그라운드 작업 중인 어플리케이션이 리소스를 너무 많이 사용하면 사용자가 모바일 기기를 사용함에 있어 불편함이 생길 수 있기 때문에 조심해야 하며, 이런 이유로 API26부터는 여러 가지 제약을 걸었고 사용할 영역도 줄어들었다고 한다. (쉽게 말해서 내가 작업하라고 시킨 것도 아닌데 웹서핑을 하거나 게임을 하는데 백그라운드 작업이 렉을 발생시키면 나는 영문도 모른 채 버벅거리는 불편함이 생긴다는 것)


https://developer.android.com/guide/components/services?hl=ko 

 

서비스 개요  |  Android 개발자  |  Android Developers

서비스 개요 Service는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다. 다른 애플리케이션 구성 요소가 서비스를 시

developer.android.com

https://medium.com/mj-studio/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EC%95%84%EC%84%B8%EC%9A%94-2-1-service-foreground-service-e19cf74df390

 

안드로이드, 어디까지 아세요 [2.1] — Service, Foreground Service

안드로이드 컴포넌트 Service의 이해와 구현

medium.com

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기