https://developer.android.com/guide/components/fundamentals#Components

요약

  • 서비스는 앱을 백그라운드에서 유지시키기 위해 사용하는 진입점(entry point)이다.
  • 대표적인 예: 음악 재생파일 다운로드
  • Started Services : 작업이 왼료될 때까지 실행되는 서비스
  • Bounde Services : 다른 앱에게 백그라운드에서 서비스를 제공하는 서비스
  • 라이브 배경화면, 알림 리스너, 화면 보호기, 입력 방법 등 시스템에서 바인딩 하는 서비스들.

본문

 

서비스는 어떠한 이유가 되었던 

앱을 백그라운드에서 계속 유지시키기 위해 사용하는

(모든 앱들이 사용할 수 있는) 범용 목적의 진입점 이다.

 

오랫동안 실행하는 작업(ex: 음악 재생) 또는 원격 프로세스(ex: 파일 다운로드) 등의

사용자 UI 없이 동작하는 작업에 사용 할 수 있다.

 

실행중인 서비스에 바인딩을 하여 액티비티와 상호작용 할 수 있다.

시스템에서는 started service, binding service 2가지 서비스 사용 방법을 제공한다.

 

 

Started services는 
작업이 완료될 때까지 계속 실행되도록

시스템에 요청한다.

 

백그라운드에서 파일 동기화를 하거나, 음악을 재생하는 도중

사용자가 앱을 나가는 상황을 들 수 있다.

 

백그라운드에서 파일을 동기화 하거나, 음악을 재생하는 경우

같은 started service를 사용하더라도 

(시스템이 다르게 처리하는) 다른 유형으로 구현 한다.

 

  • 음악 재생은
    사용자가 곧 바로 인지하고 있는 것이다.
    그리고 앱은
    이 서비스가 포그라운드에서 동작하길 원함을 시스템에 알리고,
    사용자에게 앱이 실행중이라는 notification을 나타낸다.

    서비스가 종료되면 나쁜 경험을 주기 때문에,
    시스템이 서비스가 계속 동작할 수 있도록
    우선순위를 유지하도록 한다.

  • 일반적인 백그라운드 서비스는 사용자가 인지하지 못한다.
    이는 시스템이 좀더 쉽게 서비스를 관리 할 수 있음을 의미한다.

    좀더 중요한 작업을 위해 RAM이 필요할 경우
    서비스를 kill 할 수 있으며,
    얼마 후 재시작 할 수 있다.

 

Bound services

다른 앱이 서비스를 사용하고 싶을 때 사용.

(내 서비스를 다른 앱들도 사용 할 수 있게 만들 수 있다. ex)음악재생, 백신.. )

 

바운드 서비스는 다른 프로세스에 API를 제공하고

시스템은 이 프로세스간에 종속성이 있음을 인지한다.

 

따라서 프로세스 AB프로세스의 서비스 에 바인딩 된 경우

시스템은 두 프로세스가 함께 유지되어야 한다는 것을 알게 된다.

나아가 시스템은

 사용자가 A를 중요하게 다룬다면

 B 또한 중요하게 취급되어야 한다는

것을 알고 있다.

 

서비스는 유연성이 뛰어나

모든 종류의 higher-level system concepts에 유용한

빌딩 블록 이다. 

 

라이브 배경화면, 알림 리스너, 화면 보호기, 입력 방법, 접근성 서비스 

및 기타 여러 핵심 시스템 기능은 모두 애플리케이션이 구현하고

시스템이 실행될 때 바인딩하는

서비스로 빌드 됨.

서비스 구현시에는  Service.class를 상속해야 함.

 

Note: 안드로이드 5.0(API level 21) 이상이라면,

스케줄 관련 작업은 JobScheduler 사용 권함

JobScheduler

Doze API를 사용하여 작업을 최적으로 예약하여

전력 소비를 줄이는 이점을 가진다.

+ Recent posts