반응형
알람을 사용하면 특정 시간에 알림을 보내거나,
주기적으로 백그라운드 작업을 실행하는 것과 같이 특정 시점에 작업을 예약하는게 가능합니다.
이럴 때 사용하는 서비스가 바로 AlarmManager 입니다.
AlarmManager 란?
AlarmManager 는 안드로이드 시스템에서 제공하는 백그라운드 작업 예약 시스템입니다.
개발자가 특정 시간에 작업을 예약해두면, 시스템은 해당 시점에 지정한 작업을 실행해줍니다.
- 특정 시간에 알림(Notification) 보내기
- 하루에 한 번 실행되는 정기 작업 예약
- 디바이스가 재부팅되어도 유지되는 작업 예약
알람의 종류
AlarmManager 는 다양한 방식의 알람을 지원합니다.
1. 정확한 알람
- setExact() 또는 setExactAndAllowWhileIdle(), setAlarmClock() 사용
- 알림이 설정된 정확한 시간에 실행됨
- 정확한 알람을 예약하면 알람 호출이 배터리 수명과 같은 기기의 리소스에 상당한 영향을 줌
- Android 12 이상을 타겟팅하는 경우 '알람 및 리마인더' 권한 중 하나를 선언해야 함
<manifest ...>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
<application ...>
...
</application>
</manifest>
- Android 13 이상을 타겟팅하는 경우 SCHEDULE_EXACT_ALARM 또는 USE_EXACT_ALARM 권한을 선언 가능
<manifest ...>
<uses-permission android:name="android.permission.USE_EXACT_ALARM"/>
<application ...>
...
</application>
</manifest>
2. 부정확한 알람
- setInexactRepeating() 또는 setAndAllowWhileIdle() 사용
- 부정확한 알람은 잠자기와 같은 배터리 절약 제한사항을 준수하면서 알람 전송 시점에 관한 보장을 제공
- 특정 시간 후 알람 전송, 특정 기간에 알람 전송, 대략 일정한 간격으로 반복 알람 전송
- 대부분의 앱은 부정확한 알람을 사용하여 작업과 이벤트를 예약함
3. 반복 알람
- 시스템이 반복되는 일정에 따라 앱에 알림을 보낼 수 있음
- 알람을 잘못 설계하면 배터리 소모가 발생하고 서버에 큰 부담을 줄 수 있음
val alarmManager =
context.getSystemService(Context.ALARM_SERVICE) as? AlarmManager
val pendingIntent =
PendingIntent.getService(context, requestId, intent,
PendingIntent.FLAG_NO_CREATE)
if (pendingIntent != null && alarmManager != null) {
alarmManager.cancel(pendingIntent)
}
PendingIntent() 를 취소하려면 FLAG_NO_CREATE 를 PendingIntent.getService() 에 전달하여
인텐트 인스턴스를 가져온 다음 AlarmManager.cancel() 에 전달합니다.
반응형
'Android > sdk' 카테고리의 다른 글
| [Android] Android 16의 화면 방향 및 크기 조절 변경 사항 (0) | 2025.12.22 |
|---|---|
| [Android] 인앱 업데이트 기능 구현 (0) | 2025.09.23 |
| [Android] Target SDK Version, Android 앱 호환성과 최신 기능 지원 (1) | 2025.03.12 |