「アンドロイドのウェイクロックがどのように機能するか」について、誰かが説明したり、良い説明を教えてくれたりできますか? そのための Android 標準ドキュメントは忘れて構いません。
サービス (フォアグラウンドとして開始) があり、サービス内で独自のスレッドが開始されます。ユーザーがサービスを停止するまで、スレッドはループのままです。ループ内で、スレッドは HTTP 要求を実行します。応答から、スレッドは次の HTTP 要求が実行される遅延 (1 分以上) を認識します。
ディスプレイがオンの場合、HTTP リクエストは正確な予想時間内にサーバーに到達します。しかし、ディスプレイがオフの場合、遅延はどういうわけかランダムです. 例えば 1 分の場合、実際には 2:21、4:04、4:40、... しかし、表示オフ (ディープ スリープ モードと呼ばれることを想定) の場合も正確なタイミングが必要です。
そこでHTTPリクエストのwakelock.acquire()
前後を導入しましたが、これは何も変わりません。wakelock.release
しかし、それは私に一般的な質問を与えるだけです:
wakelock.acquire()
電話がスリープ状態になっているときに、コードをどのように起動して実行するのでしょうか? に到達した場合wakelock.acquire()
、それは必要ありませんか、それとも...?
わかりました、おそらくディープスリープで私のコードも実行されますが、IP トラフィックなどの特定のものは実行されません。しかし、それはうまくいくはずです。
logcat ログから、時間内に呼び出されていないことがわかりwakelock.acquire()
ます。それで、それの使用法は何ですか?サービスまたはそのスレッドを開始するときに実行できませんwakelock.acquire()
。これは、30 分の時間枠で HTTP 要求を行いたい場合でも、サービスが電話をスリープ状態にしないことを意味するためです。
wakelock.acquire()
私はむしろ、電話がディープスリープするのを妨げて、サービスを生涯にわたってしか作成できないとは信じられません。