Android AlarmManager 사용
사용 버전: Android Studio 4.0.1
사용 언어: Kotlin 1.4.0
AlarmManager는 다음과 같은 특징이 있습니다.
- 지정된 시간에 또는 정해진 간격으로 인텐트를 실행.
- Broadcast receiver와 함께 알람을 사용하여 서비스를 시작하고 다른 작업을 수행.
- 애플리케이션 외부에서 작동하므로 앱이 실행 중이 아니거나, 기기가 대기 상태인 경우에도 작업을 트리거.
- 알람은 앱의 리소스 요구 사항을 최소화. 타이머나 계속 실행 중인 백그라운드 서비스를 사용하지 않고 예약 가능.
AlarmManager를 이용해서 Notification을 반복적으로 불러오는 것을 해보겠습니다.
먼저 알림을 먼저 사용해 줍니다.
사용 언어: Kotlin 1.4.0
안드로이드 AlarmManager 사용을 해보겠습니다.
AlarmManager는 다음과 같은 특징이 있습니다.
- 지정된 시간에 또는 정해진 간격으로 인텐트를 실행.
- Broadcast receiver와 함께 알람을 사용하여 서비스를 시작하고 다른 작업을 수행.
- 애플리케이션 외부에서 작동하므로 앱이 실행 중이 아니거나, 기기가 대기 상태인 경우에도 작업을 트리거.
- 알람은 앱의 리소스 요구 사항을 최소화. 타이머나 계속 실행 중인 백그라운드 서비스를 사용하지 않고 예약 가능.
AlarmManager를 이용해서 Notification을 반복적으로 불러오는 것을 해보겠습니다.
먼저 알림을 먼저 사용해 줍니다.
기존에 버튼을 누르면 Notification이 나오는 것을 제거합니다.
위에를 아래처럼 수정합니다.
ViewModel을 사용합니다.
여기서 ViewModel을 AndroidViewModel로 변경합니다.
아래는 ViewModel class 파일.
아래는 ViewModelFactory class 파일.
아래는 Fragment class 파일.
NotificationUtils.kt 파일로 가서 아래 함수를 추가합니다.
ViewModel로 가서 AlarmManager를 정의합니다.
그리고 알람 시작 함수를 만듭니다.
현재 시각 + 5 초 뒤에 Notification이 발동하도록 triggerTime을 설정했습니다.
그리고 Notification을 보여주기 전에 기존에 있던 Notification은 cancel로 모두
지우도록 만들었습니다.
AlarmReceiver class 파일을 만듭니다.
그리고 BroadcastReceiver()를 상속하고, onReceive를 override 합니다.
ViewModel로 돌아옵니다. 위로 올라가서, REQUEST_CODE와 notifyPendingIntent,
notifyIntent를 추가합니다.
clearAlarm도 만들어 줍니다.
AlarmReceiver를 수정합니다.
Fragment로 돌아와서 버튼에 알람을 연결합니다.
Manifest로 갑니다.
<application></application> 태그 안에
<receiver></receiver> 태그를 만듭니다.
실행해 봅시다.
실행됩니다.
앱을 뒤로 가기 해서 나가봅니다.
잘 실행되네요.
AlarmManager를 사용하면서 발견된 문제점이 있습니다.
첫 번째 실행 시에는 메모리에서 지울 시, AlarmManager가 실행되지 않습니다.
두 번째 실행 때에는 메모리에서 지워도 잘 실행됩니다.
다른 문제점은 분명 5 초 단위로 했지만, 약 1 분마다 실행된다는 것입니다.
아마도 최소 시간이 1 분인가 봅니다.
끝.
카테고리: Android
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.