Android Studio (Kotlin)

Android Component (3)

애용쓰 2022. 4. 18. 03:42

bindService

: startService()와는 달리 하나 이상의 클라이언트 컴포넌트 간의 통신을 구현 가능. 서비스를 실행시켜놓고 필요할 때마다 서비스의 메소드에 접근하여 통신할 수 있는 구조.

 

bindService 생명주기

서비스가 bindService로 시작되면 onCreate()->onBind() 함수가 호출되면서 Running 상태가 된다.

bindService()로 실행된 서비스는 unbindService()로 종료

종료하면서 onUnBind()->onDestroy() 함수가 호출된다.

onCreate()->onBind()->onUnbind()->onDestoy()

 

startService 생명주기

onCreate()->onStartCommand()->onDestroy()

 

Binder를 통해 Activity와 Service가 통신하는 프로세스

Acvitiry->ServiceConnection->Service->Binder->ServiceConnection

  • Intent를 통해 bindService() 매개 변수로 Service Connection 인스턴스를 넣고 bindService 시작
  • Service Connection 메서드인 onServiceConnected의 인자로 Binder가 주어짐

 

AIDL을 통한 서비스 구현

AIDL : Android Interface Definition Language

Android SDK는 AIDL 파일 기반으로 java 언어로 인터페이스를 생성해준다. 

 

Foreground Service

: 활성화된 액티비티와 동급의 우선순위를 가진다. 예를 들어 멜론 같은 음악 앱을 이용하면 현재 재생중인 음악이 알림에 뜨는 것과 같다.

  • 안드로이드 9(API Level 28)이상 부터는 Foreground service를 사용하기 위해 FOREGROUND_SERICE권한을 manifast에 명시해 주어야한다.

 

Notification

: 알림, 화면을 사용하지 않고 사용자에게 알림기능을 제공한다

  • 새로운 상태바 아이콘을 생성
  • 확장된 상태바에 추가 정보를 표현할 수도 있으며 진동 등을 사용해 알림을 줄 수도 있다.

구현

  • Channel 생성
  • Notification 생성
  • NotificationManager를 통해 전송

getSystemService를 통하여 Manager를 획득한 후 channel을 등록한다.

Notification을 생성하고 NotificationManager를 통해서 전송한다.

  • PendingIntent : 노티를 클릭했을 때 이동할 activity를 지정
  • builder : Notification을 생성한다. channel 필요
  • setSmallIcon : 화면에 보일 icon
  • setContextTitle : 화면 타이틀
  • setContextText : 타이틀 하위 텍스트
  • priority : 중요도
  • setAutoCancel : true - 클릭하면 사라지게 함
  • setContentIntent : 클릭시 이동 할 PendingIntent