Android/sdk

[Android] AlarmManager 통해서 알람 예약하기

mins9273 2025. 4. 17. 18:36
반응형

알람을 사용하면 특정 시간에 알림을 보내거나,

주기적으로 백그라운드 작업을 실행하는 것과 같이 특정 시점에 작업을 예약하는게 가능합니다.

 

이럴 때 사용하는 서비스가 바로 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() 에 전달합니다.

반응형