Service
백그라운드에서 실행되는 컴포넌트로, 화면을 구성하는 레이아웃을 작성할 필요가 없다. 이러한 이유로, 지속적으로 장시간 동작해야하는 기능인 경우 서비스에 구현해야 한다. 서비스로 동작하게 하고 싶다면 Service 클래스를 상속한 후, 생명주기 메소드를 재정의해서 원하는 기능을 구현하면 된다.
일반적으로 쓰레드를 이용해 백그라운드 작업을 하다가 사용자의 이벤트 또는 어떠한 이유로 인해 (예: Back press로 액티비티가 종료되고 앱 프로세스의 우선순위가 낮아짐) 프로세스가 종료될 수 있습니다. 이 경우 쓰레드도 함께 종료됩니다.
컴포넌트 : 활성 상태의 액티비티, 브로드 캐스트 리시버, onStart, onCreate, onDestroy를 실행하는 서비스
프로세스 우선순위
1. 활성 프로세스(Foreground) : 사용자가 상호 작용하는 컴포넌트를 가진 프로세스
2. 가시 프로세스(Visible) : 포그라운드 컴포넌트를 가지지 않지만 사용자의 화면에 보이는 상태입니다.
3. 시작된 백그라운드 서비스 : 사용자와 직접 상호 작용하지 않는 서비스
4. 백그라운드 프로세스(Background) : 종료되지 않았지만 화면에 보이지 않는 액티비티 또는 활성화된 컴포넌트가 없는 프로세스입니다.
우선순위가 낮을수록 포어그라운드 프로세스에 필요한 리소스 확보를 위해 가장 우선적으로 종료됩니다.
서비스는 앱에서 1개의 인스턴스만 생기므로 싱글톤 패턴을 구현하지 않아도 괜찮습니다.
Service Life Cycle
서비스는 Unbounded service(시작, 종료만 관여)와 Bounded service(연결 유지와 데이터 교환)로 구분됩니다.
유튜브 영상 등의 재생화면을 보이지않게 하더라도 재생되어 소리만 듣는 경우 Unbound에 해당
유튜브 영상 등의 재생화면을 직접 보면서 눈으로 볼 수 있는 경우 Bound에 해당
서비스 생명주기
Unbounded Service
onCreate() : 서비스가 생성될 때 호출됩니다.
onStart(): startService() 메소드에 의해 서비스가 시작될 때 마다 호출됩니다.
onDestroy() : 서비스가 종료될 때 호출
Bounded serice
onCreate(): 서비스가 생성될 때 호출됩니다.
onBind(): bindService() 메소드에 의해 서비스가 시작될 때 호출됩니다.
onUnbind(): 서비스와 연결이 끊겼을 때 호출됩니다.
onDestory(): 서비스가 종료될 때 호출됩니다.
'Android' 카테고리의 다른 글
Localization(지역화) (0) | 2021.02.22 |
---|---|
안드로이드 4대 컴포넌트 중 Broadcast Receiver란? (0) | 2021.02.06 |
안드로이드 4대 컴포넌트 중 Activity란? (0) | 2021.02.05 |
안드로이드 4대 컴포넌트 (0) | 2021.02.05 |
안드로이드 개념) Android SDK(software development kit)와 file format (0) | 2021.01.30 |