아래 내용은 AmbientMode에 대해 이해하고 있다는 가정하에 작성하였다.
AmbientMode?
안드로이드에는 배터리 효율화를 위하여 AmbientMode를 지원한다. AOD(Always On Display)가 활성화 되어있을 때 사용자가 기기를 사용하지 않는다면 AmbientMode가 활성화되며 디스플레이에 표시되는 정보의 업데이트를 하지 않고 내부적으로 시스템에 영향을 주는 요인들을 최소화 하게된다.
AmbientMode Using AlarmManager
안드로이드는 AmbientMode에서도 디스플레이의 정보를 업데이트할 수 있는 방법을 제공한다. 하지만 짧은 주기의 디스플레이 업데이트는 배터리 소모에 영향을 주게 되므로 개발자가 잘 판단하여 밸런스를 맞춰줘야 한다. AmbientMode를 구현하기 위해 AmbientModeSupport.AmbientCallback() 을 상속받으면 3가지 메소드를 오버라이드해야 한다. 화면을 업데이트하기 위해 onUpdateAmbient() 메소드를 사용한다.
AmbientMode에서 빠른 주기로 디스플레이 컨텐츠를 업데이트하기 위해 Alaram을 구현해야 한다. 순서는 아래와 같다.
- AlarmManager 준비
- 업데이트 주기 설정
- 현재 디바이스가 Ambient Mode인지 확인하거나 Activity가 Ambient Mode로 전환될 때 다음 업데이트를 예약한다.
- Activity가 활성되거나 정지된다면 알람을 취소한다.
1. AlarmManager 준비하기
AlarmManager는 다음 알람을 예약하고, 디스플레이 컨텐츠를 업데이트 하기 위해 PendingIntent를 사용한다. 아래 예제는 어떻게 AlaramManager와 PendingIntent를 선언하는지 예시이다.
2. 디스플레이 컨텐츠와 스케쥴 데이터 업데이트 하기
AmbientMode에 진입하고, 업데이트 이벤트가 발생할 때 디스플레이의 컨텐츠를 변경하고, 새롭게 알람을 셋업할 메소드를 선언한다. 해당 메소드는 아래와 같다.
이 메소드를 호출하는 곳은 오버라이드한 onEnterAmbient() , onUpdateAmbient() 이다.
3. 알람 정리하기
마지막으로 Activity를 정리할 때와 AmbientMode가 종료될 때(AmbientExit), AmbientMode의 알람을 해제해야 한다.
정리
AmbientModeSupport를 사용해 본적이 있다는 가정하에 글을 작성하였다. AmbientModeUpdate는 기기의 배터리 성능에 영향이 최소화 될 수 있도록 개발자 스스로 노력해야 한다.
다시 한번 AmbientModeUpdate에 대해 정리하자면 아래와 같은 순서이다.
- AlarmManager 준비
- 업데이트 주기 설정
- 현재 디바이스가 Ambient Mode인지 확인하거나 Activity가 Ambient Mode로 전환될 때 다음 업데이트를 예약한다.
- Activity가 활성되거나 정지된다면 알람을 취소한다.
Reference
https://developer.android.com/reference/androidx/wear/ambient/AmbientModeSupport
https://developer.android.com/reference/androidx/wear/ambient/AmbientModeSupport.AmbientCallbackProvider
https://developer.android.com/training/wearables/watch-faces/designing.html#DesignGuidelines
https://developer.android.com/training/wearables/watch-faces/performance.html
https://github.com/android/wear-os-samples
'Android > Component' 카테고리의 다른 글
[Android] local.properties를 사용하여 키 관리하기 (2) | 2022.08.08 |
---|---|
[Android] 위치(Location) (1) | 2022.07.14 |
Application Foreground/Backgroud 상태 확인하기 (0) | 2022.06.13 |
[Android/Unity] Failed to install the following Android SDK packages as some licences have not been accepted. (0) | 2022.05.07 |
[Android/Unity] 터미널 환경에서 빌드하기 (Ubuntu) (2) | 2022.05.05 |