본문 바로가기

Android/AlarmManager

안드로이드 AlarmManager 예제

안드로이드 시스템에서 주기적으로 한번씩 수행해야 할 로직이 필요하다면 AlarmManager 클래스가 유용할 것이다.

Activity나 Service가 가진 단점 중에 한가지는 언제든지 시스템이 판단하여 실행을 중지시킬 수 있으며 메모리에서 제거될 가능성도 있으므로 지속적으로 중단 없이 백그라운드에서 실행되어야 하는 프로그램을 작성하기에는 적합하지 않을 수도 있다.

안드로이드 폰의 스크린이 꺼지면 CPU도 SLEEP 상태로 들어가면서 실행 상태에 있던 Activity나 Service가 중지될 수도 있다. 이런 경우에는 안드로이드 시스템에서 제공하는 AlarmManager를 사용하여 주기를 설정해 두고 지속적으로 반복하여 Activity나 Service를 호출하는 방법을 사용하는 것도 한가지 해결책이 될 수 있다. AlarmManager는 SLEEP 상태에 들어간 CPU를 깨우고 지정한 프로그램을 실행할 수 있다.

다음과 같은 코드를 Activity나 혹은 BroadcastReceiver 안에 포함하면 AlarmManager가 SLEEP 상태에 들어간 CPU를 깨우고 등록된 프로그램을 실행하게 된다. 시스템 부팅시부터 주기적으로 실행될 필요가 있는 경우에는 BroadcastReceiver 에서 BOOT_COMPLETED 액션을 수신하고  아래의 코드를 실행하도록 하면 된다. 다른 구성 파일은 여기를 참조하세요         여기도...

package test.android.hello; import java.util.Calendar; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){     int SECS = 1000; int MINS = 60 * SECS; Calendar cal = Calendar.getInstance(); Intent in = new Intent(context, MyNotifyService.class); PendingIntent pi = PendingIntent.getService(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); alarms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10 * MINS, pi); } } }