2

Androidアプリは、ユーザーが特定の時刻に通知を送信して日々の計画に従うのを支援します。このタスクはJobSchedulerで簡単に解決できます。それは簡単で、軽く、最新の解決策のようです。Androidで1日に1回スケジュールされたタスクを実行する

私が苦労しているのは、毎日すべての通知を計画する方法です。私はユーザの毎日の計画をチェックし、毎日午前0時に静かに通知をスケジュールするコードを実行する必要があります。これまでに2つのアプローチが見つかりました

JobServiceを使用してください。それは

公共最終無効jobFinished(JobParameters paramsは、ブールneedsReschedule)

で再スケジュールすることができますが、私は必要があります

  1. ので、私はそれが悪い解決策だと思います成功したとしても、終了した仕事を失敗として扱う。

  2. スケジュール時間は線形/累乗で増加するそれは私には受け入れられません。

別のアプローチは、AlarmManagerを使用することであるが、デバイスが眠っている間、それはまた、欠点のカップル

  1. は、ドキュメント
  2. によると

登録アラームが保持されています(また、その間に電源がオフになった場合はデバイスを起動することもできます)、電源を切って再起動するとクリアされます。

私のユーザーは何か重要なことを逃すことができるので、これは受け入れられません。

  1. バッテリーがかなり早く消滅すると読んだことがあります。本当?私はマニュアルに記載されていました

他のソリューションは私が必要なもののように見えていません。 (https://developer.android.com/topic/performance/scheduling.html

日常的にスケジュールされたタスクを実行して再起動する方法はありますか。

答えて

0

JobServiceの使用は問題ありません。ジョブのスケジュールを変更する必要はありません。必要に応じて新しいジョブを作成してください。

+0

良いアイデア。しかし、以下のコメントに基づいて、私はJobSchedulerの実行を延期できるので、Dozeモードも考慮する必要があります。だから私が理解する限り、私はJobSchedulerとAlarmMangerでこの機能を実装することができ、バッテリ消費とスケジュール時間精度の間の唯一のトレードオフです。少なくとも、いくつかの選択肢があるのは良いことです。ありがとうございました! – StackNRG

0

アラームのスケジュール設定にも問題があります。物事を悪化させるために、Android 6からはDozeモードがあり、アラームの実行が遅れます。

を見てみてください:アラームのhttps://developer.android.com/training/monitoring-device-state/doze-standby.html

を、ブート、完全なリスナーを持っているし、再起動時にアラームを再スケジュールすることができます。アラームの発射中にネットワークに接続する必要がない場合は、を上記のリンクからDozeに変更してください。

+0

AlarmMangerがsetAndAllowWhileIdle()メソッドを使用して私の要件を満たすことができるように見えます。今私が抱いている唯一の懸念はバッテリーの消費です。ドキュメント から "これらのアラームは、アイドル状態のときのデバイスの電力使用に大きな影響を与える可能性があります。 AlarmMangerがどのくらいの高価なのかを調べるための実験/研究。私はAndroidに慣れていないので、Dozeモードのセクションは欠落しています。これを指摘してくれてありがとう! – StackNRG

+0

これまでの経験から、 'setExactAndAllowWhileIdle 'は必要な時に起動するように見えますが、唯一の欠点は、あなたがアラーム発射中にネットワークに接続していないように思えることです。だから地元のもののためにそれを使用する必要があります。私が理解したところでは、Dozeモードでは、アラームとジョブは次のメンテナンスウィンドウに延期されているので、ジョブスケジューラはあなたのケースでは役に立たないようです。物事を悪化させるためにJobSchedulerはアンドロイド21+から利用可能で、古いバージョンにはFirebase JobDispactherがありますが、現時点ではアンドロイド5でもGooglePlayDriverだけを使用しているようです... – Alin

関連する問題