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

onCreate() : 서비스가 처음 생성되었을 경우 onStartCommand() 혹은 onBind()가 호출되기전에 호출된다. 서비스가 이미 실행중일 경우 이 메소드는 호출 x
onStartCommand() : 시스템에서 액티비티와 같이 다른 컴포넌트에서 startService()를 호출하게 되면 이 메소드가 실행되고 서비스가 시작된다. 이 메소드를 구현한 후 서비스를 중단하기 위해 stopSelf()나 stopService() 메소드를 호출해야 한다. 바인딩만 할 경우 해당 메소드 구현할 필요 x
onStartCommand()의 return 값으로는 아래와 같다.
START_NOT_STICKY: 시스템이 서비스를 onStartCommand()를 반환 후에 중단시키면 서비스를 재생성 하면 안됨. 서비스가 불필요하게 여러개 생성되는 것을 막을수 있는 방법
START_STICKY: 시스템이 onStartCommand() 반환 후에 서비스를 중단하면 서비스를 자동으로 다시 생성하고 마지막 인텐트는 전달하지 않음.
START_REDELIVER_INTENT: 시스템이 onStartCommand()를 반환 후에 서비스를 중단하는 경우, 서비스를 다시 생성하고 이 서비스에 전달된 마지막 인텐트로 onStartCommand()를 호출하면 모든 보류 인텐트가 차례로 전달
(즉시 재개되어야 하는 작업을 수행할 때(예: 파일 다운로드)에 적합
시스템에서 액티비티와 같이 다른 컴포넌트에서 bindService()를 호출하게 되면 이 메소드가 실행되고 서비스에 바인딩됩니다. 이 메소드의 구현체에서는 IBinder를 리턴하여 클라이언트와 서비스가 통신할 수 있는 인터페이스를 제공해야 합니다. 항상 이 메소드를 구현해야 하며, 바인딩을 원하지 않으면 null을 반환하는 식으로라도 구현해야 합니다
Manifest에 서비스를 activity와 유사하게 등록을 해주어야 한다.