Android 6.0+でバッテリーの「改善」が追加されたため、基本的には詰まっています。私のアプリは、サードパーティのサーバーのWebサービスからデータをフェッチ:私のアプリは11+IntentServiceをアンドロイドでx分ごとに実行する適切な方法、dozeが含まれています
シナリオ
ここに私のシナリオだからAPIをサポートしています。それは私のサーバーではないので、データの追加や削除を制御することはできません。データの可用性はさまざまです。 IntentServiceを起動してデータをフェッチできるようにしたい、たとえば、次の6時間30分ごとに60分。このようにして、アプリケーションがサーバーからデータを取得できない場合のデータをアプリケーションに格納することができます。 もちろん、私のアプリが閉鎖されていても、これは必要です。
これはバッテリーとの親和性が低いと言えるかもしれませんが、パワーユーザーが手に入れるためのオプションです。
私は設定で多くのことを苦労している、これまで
やりました。繰り返しアラームを設定するのが最も簡単で最も便利な方法であるように見えますが、アンドロイド5.0までは確実に動作することが証明されています。
Doze
の紹介から、ドキュメントによると、アラームはmaintenance window
に延期されています。これらのウィンドウは1〜2〜4時などで表示されるため、私のニーズには適していません。
私は、セットrepeating
をあきらめて、Alarm
を実行して、IntentService
の実行中に再スケジュールさせようとしました。テストsetExact
はうまく動作していないようですが、setExactAndAllowWhileIdle
を試してみてください。Doze
モードの場合は、実際には適切なタイミングで起動しますが、ネットワーク接続のアクセスがなく、役に立たなくなります。
はそうであっても、私は基本的に
今、私にはない仕組みで、立ち往生しています... setRepeating
またはsetExact
とアラームが遅れているが、デバイスは、次のメンテナンスウィンドウの前に目覚めているときに何が起こるかわかりません私はアプリケーションと要件でサポートされているアンドロイドのバージョンを選択する他に何を選択するか分からない。
LE:実際には、Dozeを除外しても、アンドロイド上でバックグラウンドジョブを設定する良い方法を認識していません。私たちはJobScheduler
を持っていますが、これはすばらしいことだと思っています...しかしねえ、それはAndroid 21でのみ利用可能で、後方支援はできません...私は本当に簡単なことをして、私はすでに待っていますこれまでの数日。
ありがとう、 'setAlarmClock'は唯一の本当の選択肢だと思われますが、実際には範囲外です。 – Alin