재부팅하면 알람이 안 울리는 이유
알람 앱이 실패하는 가장 흔한 방식입니다. 헷갈리는 이유는 지나고 나서 봐도 아무 이상이 없어 보이기 때문입니다. 알람은 목록에 그대로 있고, 토글도 켜져 있습니다. 다만 예약이 사라졌을 뿐입니다.
안드로이드가 실제로 하는 일
예약된 알람은 시스템 알람 매니저의 메모리에 있습니다. 폰이 꺼지면 함께 사라집니다. 안드로이드는 이걸 대신 저장해 주지도, 다음 부팅 때 복구해 주지도 않습니다. 대신 기기가 다 켜졌을 때 신호를 보내고, 알람을 갖고 있던 앱들이 그 신호를 받아 자기 알람을 다시 예약해야 합니다.
앱이 그 리시버를 선언하지 않았거나, 선언했는데 죽었거나, 배터리 관리 기능에 재워져 있으면 아무것도 다시 등록되지 않습니다. 앱에 보이는 알람 줄은 데이터베이스 기록일 뿐입니다 — 앱은 내가 저장한 것을 그리고 있을 뿐, 시스템이 들고 있는 것을 보여주는 게 아닙니다.
재부팅에 해당하는 것들
- 전원을 껐다 켜기
- 배터리가 완전히 나감
- 밤사이 시스템 업데이트 설치
- 크래시 후 재시작
뒤의 두 개가 고약합니다. 일어난 줄도 모를 수 있으니까요.
비슷한 경우: 강제 종료
설정에서 강제 중지를 누르거나 "클리너" 앱을 돌리면, 안드로이드는 직접 앱을 열기 전까지 실행과 브로드캐스트 수신을 막습니다. 그 상태에서는 부팅 신호도 못 받습니다. 시스템이 일부러 만든 규칙이라 어떤 앱도 우회할 수 없습니다. 최근 앱 목록에서 밀어 없애는 것은 이것과 다르고 해가 없습니다.
2분이면 내 앱을 시험할 수 있다
- 지금부터 5분쯤 뒤로 알람을 맞춘다.
- 폰을 재부팅하고 잠금화면에 둔다.
- 기다린다.
울리면 그 앱은 부팅 시 다시 등록합니다. 안 울리면 내 쪽 설정으로는 해결되지 않습니다 — 앱이 고쳐야 합니다. 중요한 일에 기대기 전에 한 번 해보는 게 좋습니다.
제대로 만든 앱이 하는 일
- 부팅 리시버를 등록하고 기기가 켜지자마자 켜진 알람을 전부 다시 예약한다.
- 일반 백그라운드 작업이 아니라 Doze 예외인 안드로이드 알람 시계 예약을 쓴다.
- 앱을 열 때마다 한 번 더 다시 등록한다 (2차 방어선).
- 결과를 기록해서 실패가 조용히 묻히지 않게 한다.
웨이크벨
웨이크벨은 네 가지를 전부 합니다. 앱을 열지 않아도 재부팅 후 알람이 돌아오고, 예약은 정확하고, 앱을 열면 어차피 전부 다시 등록하고, 알람 기록에 각 알람이 울렸는지 — 등록 자체가 실패했다면 그것까지 — 남습니다.