유저가 서비스가 돌아가는지 알지 못해도 작동하기에 액티비티보다 생명주기 자체는 간단하지만 더 주의를 기울여야한다.
startService()를 호출한 경우 서비스가 생성된다. 해당 서비스를 종료하려면 스스로 stopSelf() 호출 혹은 다른 컴포넌트에서 stopService()를 호출해서 종료한다.bindService()를 호출한 경우 생성된다. IBinder를 통해서 클라이언트는 서비스와 통신한다. unbindService()를 호출함으로 종료된다.
Jetpack이라는 안드로이드 컴포넌트 라이브러리 모음에서 AAC는 Architecture 영역을 말하며
WorkManager를 제외하고는 모두 사용해본 적 있다.
스레드에서 생각나는 synchronized, Mutex, Semaphore 등 방법이 있지만 흥미로운 아래 두가지에 대해서 더 살펴봤다.
상태 엑세스를 단일 스레드로 한정한다.
다른 쓰레드에서는 채널을 통해 상태 수정 요청하는 방식.
생성된 액터는 내부적으로 ReceivedChannel을 가지고 있다.
다른 호출부에서는 액터는 채널과 같기에 send()함수를 통해 상태 수정을 요청한다.
이때 Actor의 장점 중 하나인 behavior도 캡슐화 가능하다.
채널에 대해서는 다른 글에서 소개!