마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AlarmManager 알람이 정확한 시간에 깨어나지 않습니다.

0 추천

alarmManager.setRepeating(AlarmManager.RTC, startDate.getTime(), 1000 * 60 * 10, operation);

이렇게 특정 시간부터 호출이 시작되어 10분에 한번씩 호출되는 알람을 만들었습니다.

그런데 막상 호출되는 서비스에 로그를 찍어보면, 정확히 10분이 아니라,

2시00분, 2시12분, 2시24분, 2시29분

이런식으로 불규칙하게 로그가 나와버립니다.

이 문제를 해결하려면 어떻게 해야하나요 ??

단말에 기본 탑제된 알람 어플은 정확한 시간에 깨어나는데 왜 안되는걸까요 ?

음무 (17,820 포인트) 님이 2015년 10월 28일 질문

2개의 답변

+1 추천
 
채택된 답변
혹시 AlarmManager.RTC를 RTC_WAKEUP으로 바꿔 보시겠어요? RTC의 경우에는 폰이 슬립으로 들어간 경우에 정확한 시간을 세지 못하는 문제가 있는 것으로 알고 있습니다.
mcsong (44,040 포인트) 님이 2015년 10월 28일 답변
음무님이 2015년 10월 28일 채택됨
마찬가지네요 .. 일어나는 시간이 불규칙적입니다.

특정 시간에 서비스가 깨어나 30분에 한번씩 원하는 작업을 하려고 하는데 (새벽 등)

알람을 제외한 다른 좋은 방법이 있을까요 ??
알람이 제일 좋은 방법이라서.. 다른 방법은 제약이 따르게 됩니다. 서비스로 올려서 timertask로 돌린다던가.. 하는 방법인데.. 알람 쓰는게 좋다고 생각합니다. 혹시 다른 폰이나 환경에서 테스트 해 보셨나요?
+1 추천
알람 api들이 버전에 따라 다르게 동작하는 부분이 있어서 별도로 구현을 해줘야 합니다.

sdk 19부터는 setExact메서드, 21부터는 setAlarmClock메서드를 사용해야 정확한 시간에

울립니다.
마리노 (3,320 포인트) 님이 2015년 12월 21일 답변
setalarmclock클럭대신에 setAndAllowWhileIdle을 써서 해도 상관이 없다길래 이와 같이 사용하였습니다(물론 배터리사용량에 부담이 갈수도 있다함...) 그런데
alarm.set(int type, long triggerAtMillis, PendingIntent operation)과
alarm.setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)이 비슷한 형태라, 그냥 예전에 set을 써서 했던것을  setAndAllowWhileIdle로만 바꾸어서 사용하였는데 앱이 죽습니다... 뭔가 해결점을 못찾고 있어서 방황하고 있는데, 짧게나마 조언이라도 해주시면 감사하겠습니다...
앱이 죽을 때의 로그를 알아야 원인을 알 수 있습니다.
단말 os 버전이 낮은건 아닌가요?
...