티스토리 뷰
Service ?
Service는 "특정 누군가에게 특정 기능을 제공하는 컴포넌트" 이다.
Service는 안드로이드의 4대 Component중 하나로, 가장 중요하고 가장 어렵다고 한다.
화면을 가지지 않고 백그라운드에서 실행되며, 다른 컴포넌트에 의존하지 않고 독립적인 동작을 수행한다.
각종 컴포넌트에서 서비스를 제어하거나 원하는 정보를 참조할 수도 있다.
Thread는 액티비티가 종료되면 객체가 소멸/초기화 됨에 따라서 이를 제어할 수 없다는 차이점이 있다.
Thread 자체가 종료되는 것이 아니다. Main Thread가 종료되지 않기 때문에 자식 Thread도 여전히 살아있다.
하지만 이 자식 Thread를 컨트롤 할 수 없다. 심지어는 종료시킬 수도 없다. 혼자 막 구동되고 있는 상태.
따라서 반드시 Thread를 사용하고 싶을 땐 Activity가 종료될 때 생명주기 함수를 사용해 종료시켜야 한다.
가장 대표적인 예로 멜론의 음악재생, 파일다운로드(네트워크 통신) 등이 있다.
* 서비스의 시작은 항상 또다른 서비스, Receiver, Activity를 포함한 Application에서 이루어진다.
* 서비스를 실행중인 프로세스는 왠만하면 시스템에서도 살려준다. ( 우선순위 )
개발 시에는 액티비티를 가장 많이 사용하지만, 시스템 측면에서는 서비스를 가장 많이 사용한다.
안드로이드 시스템 자체가 대부분 서비스로 이뤄져 있다.
사실 아주 많은 서비스가 백그라운드에서 동작하고 있다.
Service의 종류(?)
종류라고 명명하기에는 조금 애매하지만 그래도 내 나름대로 분류하자면 다음과 같다.
Local Service는 하나의 Application(프로젝트) 내부에서 Service가 구현되고 호출되는 형태.
Remote Service는 다른 Application에 구현된 Service를 또 다른 Application에서 호출하는 형태.
( 안드로이드는 기본적으로 프로세스간의 메모리자원 공유가 안된다. 근데 어떻게 가능할까..? )
→ Service에서 지원하는 IPC/RPC를 사용해서 가능하다.
* 다시 설명하면 프로세스간의 메모리자원 공유가 필요할 때에 Service를 사용할 수 있다는 말.
위에서 startService, IntentService를 사용하는 방법은 Started Service이고, Local bindService, Remote bindService를 사용하는 방법은 Bound Service에 해당한다. 이 두가지에 대해서는 보는바와 같이 생명주기에 대한 내용이 다르다.
바운드 서비스
외부 라이브러리를 사용하는 것과 매우 유사하다.
서비스로 연결된 컴포넌트는 서비스에 존재하는 함수들을 마치 라이브러리를 가져다 사용하듯이 호출할 수 있다. 이렇게 연결된다는 부분에서(위 그림 3번처럼) Bound Service라 부른다.
내/외부 앱과 계산 서비스의 관계는 서로 의존적이다. (연결되어 있기 때문)
즉, 서비스를 요청한 컴포넌트가 종료되면 서비스 연결도 끊어진다.
내/외부 컴포넌트와의 연결을 끊는 요청이 없는 이상, 요청한 작업이 완료되었더라도 요청은 유지된다.
진짜 라이브러리누..?
Started Service와 Bound Service를 동시에 활용해야 하는 상황이 존재하기 때문에 둘다 알고있어야 한다.
다음 포스팅부터 startService → IntentService → Local bindService → Remote bindService
순으로 내용을 정리하도록 하겠다. ( 사실 Remote bindService는 아직도 이해가 안된다..... )
'Android > Concept' 카테고리의 다른 글
[Android] IntentService (Local Service) (0) | 2019.08.20 |
---|---|
[Android] startService (Local Service) (0) | 2019.08.20 |
[Android] Thread Helper Class → AsyncTask ★★★ (0) | 2019.08.19 |
[Android] Thread와 Handler ( Feat. Sub Thread에서의 UI 설정 ) (0) | 2019.08.19 |
[Android] Thread 제약사항 (0) | 2019.08.19 |