728x90

Service 

안드로이드 4대 컴포넌트 중 하나이며, 사용자와 상호작용하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이다.

 

  • 사용자 인터페이스를 제공하지 않는다. 
  • Service가 시작되면 사용자가 다른 애플리케이션으로 전환한 후에도 한동안 서비스가 계속 실행될 수 있다.
  • 구성요소는 Service에 바인딩되어 서비스와 상호작용하고 프로세스 간 통신 (IPC)을 실행할 수도 있다.
    •  Service는 백그라운드에서 네트워크 트랜잭션을 처리하고, 음악을 재생하거나, 파일 I/O를 실행하거나, 콘텐츠 제공업체와 상호작용할 수 있습니다.
  • 포그라운드 서비스
    • 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 방식으로 처리되는 서비스
    • 유저가 현재 뭘 하고 있다는 걸 인지하고 있는 서비스
    • 메모리 부족 시 안드로이드 시스템에 의한 강제종료 대상에서 제외됨
    • 포그라운드 서비스가 실행되는 도중엔 무조건 상태바에 알림이 제공돼야 함
    • 앱과 사용자가 상호작용하지 않아도 계속 실행됨
    • 포그라운드 프로세스 : 화면에서 앱이 어떤 작업을 하는지 눈으로 볼 수 있는 프로세스(유튜브 시청, 웹 서핑)
  • 백그라운드 서비스
    • 사용자에게 안 보이는 작업을 수행
    • 인스타에서 게시물 공유 버튼을 눌러 인스타에 사진을 업로드하는 동안 카톡하거나 인스타를 꺼도 게시물 업로드는 종료되지 않는다. 이 때 백그라운드 서비스가 사용됨
  • 바인드 서비스
    • 클라이언트-서버 구조처럼 컴포넌트가 서비스에 연결되면 서비스가 서버 역할을 함
    • 컴포넌트가 서비스에게 요청하면 서비스는 그것에 맞는 결과값을 리턴 함 
    • 클라이언트가 연결을 해제하고 서비스와 연결된 클라이언트가 없을 때 바인드 서비스가 종료

Service의 생명 주기

  • onCreate() : 서비스가 처음 생성되었을 경우 onStartCommand() 혹은 onBind()가 호출되기전에 호출된다. 서비스가 이미 실행중일 경우 이 메소드는 호출 x
  • onStartCommand() : 시스템에서 액티비티와 같이 다른 컴포넌트에서 startService()를 호출하게 되면 이 메소드가 실행되고 서비스가 시작된다. 이 메소드를 구현한 후 서비스를 중단하기 위해 stopSelf()나 stopService() 메소드를 호출해야 한다. 바인딩만 할 경우 해당 메소드 구현할 필요 없음

 

onStartCommand()의 return 값

 

START_NOT_STICKY: 시스템이 서비스를 onStartCommand()를 반환 후에 중단시키면 서비스를 재생성 하면 안됨. 서비스가 불필요하게 여러개 생성되는 것을 막을수 있는 방법

START_STICKY: 시스템이 onStartCommand() 반환 후에 서비스를 중단하면 서비스를 자동으로 다시 생성하고 마지막 인텐트는 전달하지 않음.

START_REDELIVER_INTENT: 시스템이 onStartCommand()를 반환 후에 서비스를 중단하는 경우, 서비스를 다시 생성하고 이 서비스에 전달된 마지막 인텐트로 onStartCommand()를 호출하면 모든 보류 인텐트가 차례로 전달

(즉시 재개되어야 하는 작업을 수행할 때(예: 파일 다운로드)에 적합

  • onBind(): 안드로이드의 구성요소가 서비스에 바인딩하고자 하는 경우, 이 메소드가 호출

시스템에서 액티비티와 같이 다른 컴포넌트에서 bindService()를 호출하게 되면 이 메소드가 실행되고 서비스에 바인딩 된다.

이 메소드의 구현체에서는 IBinder를 리턴하여 클라이언트와 서비스가 통신할 수 있는 인터페이스를 제공해야 한다.

항상 이 메소드를 구현해야 하며, 바인딩을 원하지 않으면 null을 반환하는 식으로라도 구현해야 한다.

 

Manifest에 서비스를 activity와 유사하게 등록을 해주어야 한다.

 

 

참고자료 

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

 

서비스 개요  |  Background work  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 서비스 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Service는 백그라운드에서 장기 실행 작업

developer.android.com

https://onlyfor-me-blog.tistory.com/380

 

[Android] 서비스란?

서비스는 안드로이드 4대 컴포넌트 중 하나로, 백그라운드에서 어떤 작업을 수행해야 할 때 사용을 고려할 수 있는 컴포넌트다. 그러나 백그라운드에서 수행되는 작업이라고 다 서비스를 사용

onlyfor-me-blog.tistory.com

 

+ Recent posts