AndroidのAlarmManagerで設定したAlarmが消えてしまうことがあった

(後記。TIME_SET等ではAlarmが消えることはありませんでした。コメント参照してください)

Androidのアプリを作っていた。
AlarmManagerでServiceを定期的に起動するようにしたが、気がついたら、Serviceが動かなくなっている。
なぜ? とググっていたら・・・

rokuta96のAndroidアプリ開発 アラーム3

システム時間変更イベントで、アラームがクリアされてしまうとのこと。

えーそんなのアリかよ・・・でもまあそういうイベント時にクリアしたくなるOSの気持ちもわかるな・・・
え、でもおれ今回のアプリを実験開始してから時刻設定とかタイムゾーン変更とかしたことないし、おかしくね?・・・・・・・・・あっ!

日付と時刻…ネットワーク自動設定!これかあ!

さっそくBroadcastReceiverを付けて確認してみたら、たしかに、ときどき、TIMEZONE_CHANGED や TIME_SET が発生していた。
これ気をつけないといけないのね。

AndroidのAlarmManagerで設定したAlarmが消えてしまうことがあった” への5件のコメント

  1. はじめまして
    同じ現象にぶちあたりました。
    こちらに書いてある方法で解決しましたか?
    バグと同じ状況になることがまれで、検証が難しい状態なので…

  2. こんにちは。

    私は

    android.intent.action.BOOT_COMPLETED
    android.intent.action.PACKAGE_REPLACED
    android.intent.action.TIME_SET
    android.intent.action.TIMEZONE_CHANGED
    android.intent.action.DATE_CHANGED

    のBroadcastを拾ったら、アラームマネージャ再登録するようにして、解決したと思ってます。
    (BOOT_COMPLETED, PACKAGE_REPLACED は、作ったアプリが、起動時から動作させるようにしてあるものであるため)

  3. 解決しました。
    タスクキラー系アプリがAlarmManagerの設定を消してしまうことがあるようです。

    TIME_SETやDATE_CHANGEDで定期的にセットし直すというxoさんの解決法で行けそうです。
    どうもありがとうございました。

  4. こんにちは。アラーム設定方法を検索してここにたどり着きました。

    エントリ内容が少し気になったのですが、リンク先では(事実か否かはともかく)
    「システム時間変更イベントで、アラームがクリアされてしまう」
    とは書かれていないように見えます。

    リンク先で書かれている、アラームが消える条件は下記3ケースのみではないでしょうか。

    端末の電源をオフにした時
    アプリをアンインストールした時
    アプリをバージョンアップインストールした時

    # 古いエントリへのコメントで申し訳ありません。

  5. あれ・・・って、言われてみるとそのとおりですね・・
    TIME_SET等ではalarmそのものは消えませんね。
    何を勘違いしていたんだろう。

    しかしながら、
    たとえば AlarmManager#setInexactRepeating() でリピートタイマを設定後、
    時間が巻き戻るようなことが起きた場合は、
    次のアラームまで意図しない長時間がかかったりすることはあるので、
    TIME_SET等が発生したときも、アラーム再設定するのが無難だとは思います。

コメントを残す

メールアドレスが公開されることはありません。

*