3

免責事項:私のアプリはすでに1年以上ウェイクロックなしで動作しており、ほとんどのデバイスですべて問題ありません。

私はGPSを追跡していて、次のように機能します。

  1. AlarmReceiverは5/10/15分ごとにサービスを開始します(ユーザーの希望に応じて)
  2. サービスは位置情報の更新をサブスクライブし、GPSが良好になるまで最大1分間待機します。
  3. まとめ、サーバーにデータを送信し、サービスをシャットダウンします。

接続や場所が悪いため、全体で2〜3分かかることもあります。そしてそれは動作します。電話が寝ているかどうかは関係ありません。

今、私はWakeLockについて読んでいますが、それは私には意味がありません。どうして私のものが機能しているのですか?それは偶然ですか?

4

2 に答える 2

1

どうして私のものが機能しているのですか?

運のほんの少しを含むものの組み合わせ。:-)

まず、Joelが指摘したように、デバイスはアラームのおかげで短時間ウェイクアップしますが、OSはWakeLockの持続時間の間だけを保持することが保証されてonReceive()BroadcastReceiverます。

少なくともAndroidの一部のバージョンでは、GPSの更新を要求すると、OSが独自のを取得する可能性がありますWakeLock。これは文書化されていない動作AFAIKであり、私はこれに個人的に依存したことはありません。ただし、そうであれば、場所の更新を削除する前に残りの作業(「まとめ、サーバーにデータを送信し、サービスをシャットダウンする」)を実行している場合は、動作が説明されます。

あなたのアプローチにはまだ潜在的なギャップがあります(例えば、あなたがService仕事をするために委任し、WakeLockそのサービスに制御を渡すことの一部としてを保持していない場合)。統計的に言えば、失敗することもありますが、多くの場合機能します。

個人的にはWakeLock、文書化されていない動作が変更された場合に備えて、を使用することをお勧めします。それが私がしていることですLocationPoller

于 2012-07-27T00:07:59.990 に答える
0

AlarmManagerのドキュメントをよく読んでください。

アラームマネージャは、アラームレシーバのonReceive()メソッドが実行されている限り、CPUウェイクロックを保持します。

さらに遠く...

注:Alarm Managerは、アプリケーションが現在実行されていない場合でも、特定の時間にアプリケーションコードを実行する場合を対象としています。通常のタイミング操作(ティック、タイムアウトなど)の場合、ハンドラーを使用する方が簡単で効率的です。

だからそれに基づいて..私はそれが現在機能していることは理にかなっていると思います。私が間違っている場合は私を訂正してください。

于 2012-07-26T23:08:41.917 に答える