2

ユーザーが特定の時間にアラームを鳴らし、選択した間隔で繰り返すようにスケジュールできるアプリがあります。SharedPreferences をストレージとして使用して、JSON を使用してアラームの詳細を保持しています。

私は AlarmManager を使用して、アラームを鳴らしてユーザーに通知する必要があることをアプリに通知するタイミングをスケジュールしています。現在、AlarmManager の setRepeating() メソッドを使用して、ユーザーが指定した間隔を提供しています。これはうまく機能し、理論的には、AlarmManager は間隔を使用して次のアラーム時刻を再スケジュールするだけなので、アプリは次のアラーム時刻を格納する JSON を更新する必要はありません。

ただし、デバイスが再起動されたときに、AlarmManager がアラームを見逃したと考えるのを避けるために、AlarmManager に最新のアラーム時刻を提供する必要があると考えています。これは必ずしもそうではないためです

それで、これを行う最善の方法は何ですか?

  • 必要ではないかもしれませんが、アラームが鳴ったときに JSON の次のアラーム時刻を更新します (setRepeating() は、再起動がない限りこれを処理します)?
  • シャットダウンブロードキャストを登録してリッスンし、次にJSonを更新します(これにより疑問が生じます-電話がシャットダウンされている場合、アプリがアラームの詳細を計算してストレージに書き込むのにどれくらいの時間がかかりますか)?
  • JSON を更新せずに、AlarmManager によって起動されるオブジェクトにロジックを追加してブロードキャストされたばかりのアラームが有効であり、ユーザーに警告する必要があるかどうかを判断しますか?

上記のいずれかが機能すると確信していますが、どれが最も良い方法であるかを判断することはできません.

4

1 に答える 1

1

これはほとんど選択の問題のようです。あなたが指摘した問題は、Linux ラップトップで見られ、anachrond によって解決された一般的な問題と類似しています。私の意見では、イベントが受信されるたびに時間を更新して SharedPreferences に保存するだけです。システムがいつシャットダウンするかをリッスンしようとしても、完全に信頼できるとは限りません (ユーザー (おそらく酔っ払った大学生) がデバイスを落としてバッテリーが飛んだらどうなるでしょうか?)。代わりに、このシナリオで行う最善の方法は、アラームが発生するたびに、次のアラームを送信する時間を再計算し、それをどこかに保存し、起動スケジュールに合わせて適切に実行することだと思います。

于 2012-06-09T20:22:04.573 に答える