2017-06-21 14 views
0

私のアプリは、ユーザがボタンをクリックしてから12または24時間後にmyAction()を実行する必要があります。Android - AlarmManagerまたはTimerTask/Timerはx時間の時間内にアクションを実行しますか?

は、long引数が実際の時刻ではなく、uptimeに基づいているため、使用できません。

だから私は、私はちょうどTimerTask/TimerまたはAlarmManagerが残っていますと思いますが、私は最も適切であろうこれらのかわからないんだけど - プラス、私はそれが信頼できないだと言って、TimerTaskを/タイマーについて悪い多くのコメントを聞きますなど

また、デバイスが再起動された場合、デバイスがまだ使用されていないかのように(またはできるだけ早く)実行される必要がある場合は、まだmyAction()が必要ですオフになっています。この要件では、myAction()の詳細をデータベースに格納してから、デバイスの再起動時にBootReceiverを呼び出して実行するよう呼び出す必要があるかもしれませんが、これを処理できるクラスがあればいいでしょう。

したがって、12/24時間後にmyAction()を呼び出す適切で信頼できる方法は、デバイスの再起動に対応しますか?

+1

」私はTimerTask/Timerに関する多くの悪いコメントを聞いて、それは信頼できないと言っています。 " - あなたのプロセスはそれほど長く続くと仮定しています。フォアグラウンドサービスでない限り、それは起こりそうもなく、明白な理由がない限り、ユーザーを苛立たせる傾向があります。そして、たとえそれが前景サービスであっても、あなたのプロセスがそれほど長く生き続けるという保証はありませんが、それは可能性が高いです。一般的に、目覚まし時計のシナリオ以外の特定の時間にバックグラウンドの仕事をしようとすると、進行中のバックグラウンド処理の戦争を考えると、かなり悪化するでしょう。 – CommonsWare

答えて

1

GCMネットワークマネージャまたはFirebaseジョブディスパッチャを使用します。 これは、Androidで定期的に作業する2つのベストプラクティスのアプローチです。

https://developers.google.com/cloud-messaging/network-manager#run_tasks

https://github.com/firebase/firebase-jobdispatcher-android

(注、名前は、それらがメッセージをプッシュするために関連していることを意味しますが、そうではありません。どちらも、デバイス上でローカルに定期的な作業を実行するためのソリューションです。)

+0

私はFirebase Job Dispatcherのアプローチを試しましたが、それはデバイスを再起動しても機能しませんでした。しかし、GCM Network Managerのアプローチは、デバイスを再起動しても機能しました。 (デバイスを再起動しても存続するには、 'OneoffTask.Builder'に' .setPersisted(true) 'を追加するだけです)。これまでの1-3分のウィンドウでテストしたので、24でチェックします。次に25時間のウィンドウを開き、ここに更新を掲載します。ちなみに、ここには優れたGCMネットワークマネージャチュートリアルがあります:https://codelabs.developers.google.com/codelabs/android-network-manager/index.html?index=..%2F..%2Findex#0。 –

+1

Btwでは、GCM Network ManagerとFB代替サポートの両方が再起動しても持続します。 – Shmuel

+1

よろしくお願いいたします。とにかく 'myAction()'の実行はネットワーキングのものなので、GCMネットワークマネージャーにとどめていきます。 –

関連する問題