2017-02-18 1 views
-1

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でのみ利用可能で、後方支援はできません...私は本当に簡単なことをして、私はすでに待っていますこれまでの数日。

答えて

1

デバイスがアイドルモードの場合(Dozeシステムのため)、ユーザーが積極的に使用していないため、次のメンテナンスウィンドウでジョブ(更新)を延期することについての問題はありません。これは依存する:

、電話を目覚めインターネットへのアクセスを許可するための唯一の方法は、あなたがsetAlarmClock()を使用する場合、デバイスは数分アラーム時刻の前にアイドルモードを終了します

setAlarmClock() 

を使用していますシェルコマンドを使用してテスト目的で実際に変更するDozeの設定。重要なカレンダーイベントを思い出させるような例外的なケースでは、setAlarmClock()を使用する必要があります。

また、設定すると、ステータスバーにアイコン(ベル)が表示されます。これは、システムアラームに使用されているのと同じメカニズムです。

Btw、私はこの方法をお勧めしませんし、次のメンテナンスウィンドウを待ちます。実際、ポーリングの仕組みはまったく避けるべきです。

+0

ありがとう、 'setAlarmClock'は唯一の本当の選択肢だと思われますが、実際には範囲外です。 – Alin

関連する問題