Android Component (3)
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