CS 복습

Arakene·2024년 10월 10일

서비스의 생명주기

유저가 서비스가 돌아가는지 알지 못해도 작동하기에 액티비티보다 생명주기 자체는 간단하지만 더 주의를 기울여야한다.

  • startService의 경우
    다른 컴포넌트가 startService()를 호출한 경우 서비스가 생성된다. 해당 서비스를 종료하려면 스스로 stopSelf() 호출 혹은 다른 컴포넌트에서 stopService()를 호출해서 종료한다.
  • bindService의 경우
    다른 컴포넌트(클라이언트)가 bindService()를 호출한 경우 생성된다. IBinder를 통해서 클라이언트는 서비스와 통신한다. unbindService()를 호출함으로 종료된다.
    여러 클라이언트가 같은 서비스를 바인드한 경우 모든 클라이언트가 서비스를 언바인드하면 서비스가 종료된다. 서비스 스스로가 종료를 해야할 필요는 없다.

사용한 AAC 정리


Jetpack이라는 안드로이드 컴포넌트 라이브러리 모음에서 AAC는 Architecture 영역을 말하며
WorkManager를 제외하고는 모두 사용해본 적 있다.

코루틴

race condition 관리

스레드에서 생각나는 synchronized, Mutex, Semaphore 등 방법이 있지만 흥미로운 아래 두가지에 대해서 더 살펴봤다.

Actor

상태 엑세스를 단일 스레드로 한정한다.
다른 쓰레드에서는 채널을 통해 상태 수정 요청하는 방식.
생성된 액터는 내부적으로 ReceivedChannel을 가지고 있다.
다른 호출부에서는 액터는 채널과 같기에 send()함수를 통해 상태 수정을 요청한다.
이때 Actor의 장점 중 하나인 behavior도 캡슐화 가능하다.

Channel

채널에 대해서는 다른 글에서 소개!

profile
안녕하세요 삽질하는걸 좋아하는 4년차 안드로이드 개발자입니다.

0개의 댓글