서비스는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않으며 다른 애플리케이션 구성요소 (액티비티, 브로드 캐스트, 서비스, 콘텐츠 프로바이더)를 시작할 수 있음 또, 구성 요소를 서비스에 바인드해서 서비스와 상호작용할 수 있으며 프로세스 간 통신(IPC)도 수행할 수 있다. 시작한 해당 구성요소가 소멸되도 서비스는 유지됩니다. 서비스는 작업 결과를 반환하지 않으며, 작업완료 후 중단을 해주지 않으면 무제한으로 실행됩니다. 서비스는 시작하고 바인딩을 허용할 수 있다. 서비스는 기본적으로 Main Thread에서 동작하며
Foreground
포그라운드 서비스는 사용자의 눈에 띄는 작업을 수행합니다. 음악프로그램은 Foregrond service를 사용하여 트랙을 재생합니다. Foreground Service는 알림을 표시해야되고, 사용자와 상호작용 하지 않아도 계속 실행됩니다.
Background
BackgroundService는 사용자가 직접 알 수 없는 작업을 수행합니다. 단, 앱API레벨이 26이상을 타겟팅하는 경우 앱 자체가 포그라운드에 있지 않을 때 백그라운드 서비스 실행에 제한을 부여합니다. 대신 Schedule Jobs를 사용해야합니다.
Bound
애플리케이션 구성요소가 bindService를 호출하면 해당 서비스에 바인드됩니다. 바운드된 서비슨느 IPC를 통해 구성요소와 상호작용하고, 클라이언트 - 서버 인터페이스를 제공합니다. 바운드 서비스는 해당 구성 오ㅛ소가 바인딩되어 있는 동안에만 실행되며 바인딩한 구성요소가 모두 해제되야 서비스가 삭제됩니다.
Start Service
다른 구성요소가 startService를 호출하면 서비스의 onStartCommand가 호출됩니다. 또한 서비스는 구성요소와 독립적인 수명주기를 가지고 있으며, 명시적으로 중단하지 않는 경우 무제한으로 살아 있습니다.
Service
모든 서비스의 기본클래스로서 이 클래스를 확자하여 서비스가 모든 작업을 완료할 수 있는 새 스레드를 만드는 것이 중요하다. 서비스는 기본적으로 Main Thread에서 작업하기 때문에 길어진다면 ANR이 발생할 수 있다.
IntentService
이 클래스는 작업 스레드를 사용하여 모든 시작 요청을 한 번에 하나씩 큐를 통해 처리하는 클래스이다. 서비스가 여러 요청을 동시에 처리해야할 필요가 없는 경우 IntentService를 활용하는 것이 좋다. onHandleIntent에서 필요하 로직을 구현하면 되며, 각 시작요청에 대한 인텐트를 수신하므로 백그라운드 작업을 수행할 수 있다.?
CC
한글 링크와 영문 링크를 통해 애매한 부분은 다시 보자.