1

ForegroundServiceを使用して位置情報の更新をサーバーに送信するアプリケーションがあります。基本的にトラッカー。

これForegroundServiceには、 ( postDelayedHandlerを使用して) 定期的にコード ブロックを実行して位置情報を送信する があります。

これは、アプリがフォアグラウンドにあり、バックグラウンドにある場合でも完全に正常に機能しますが、電話がロックされ、画面が約 15 分間オフになっていると、遅延に気付き始めました。つまり、ユーザーの操作がなく、充電器が接続されていない状態が 15 分間続くということです。

これは、Android Q (v10)デバイスで発生しています。これは、Oreo 以降を実行しているすべてのデバイスでも発生すると想定しています。

明確にしましょう...私のアプリは30秒ごとに場所を送信しますが、DozeModeまたはAppStandByModeであると思われるものを入力すると、場所を送信し続けますが、2分ごと(多かれ少なかれ)です。画面をオンにするか、充電器を差し込むと、すぐに 30 秒のペースに戻ります。それが、DozeModeまたはAppStandByModeについて私が気にする理由です。さらに、充電器を差し込んだまま電話をそのままにしておくと、これは決して起こりません.

前述のように、DozeModeまたはAppStandByModeが作動していることは確かであり、それを防ぐためにアプリをホワイトリストに登録できることはわかっています。しかし、さらに先に進む前に、アプリの動作をテストするたびに 15 分間待たずにこれを再現したいと考えています。

だから私はこれを強制する方法を「ググって」、ここに私が見つけたものがあります:

DozeMode(ソースを参照)

adb shell dumpsys バッテリーの取り外し

adb shell dumpsys deviceidle step deep

そして、 IDLE状態になるまで最後のコマンドを実行し続けます。

AppStandByeMode(ソースを参照)

adb shell dumpsys バッテリーの取り外し

adb shell am set-inactive packageName true

そして、この別のコマンドで状態を照会します。

adb shell am get-inactive packageName

Idle = trueを返すことを確認しました

また、この他のブログが示唆するように、以下を発行しています。

adb shell dumpsys deviceidle 強制アイドル

私はこのモードに入っていなかったのですが、今はそうなっているようで、抜け出せません... アップデートを参照してください

アップデート

最初は DozeMode に入っていないと思っていました...今は入っていることを確認できますが、常にすぐにトリガーされます。(もう15分待つ必要はありません)

電話をロックして画面がオフになると、自動的に居眠りモードになり、位置情報の更新間隔が開始されます。充電器を差し込んで、30 秒後にもう一度送信します。

私は試しました:

adb shell dumpsys deviceidle unforce

adb shell dumpsys deviceidle 無効化

adb shell dumpsys バッテリーリセット

それでも同じです。

また:

  • 電話の電源を落として電源を入れる
  • アプリをアンインストールする
  • アプリの設定内でバッテリーの最適化を NOT OPTIMZE に変更します

私はステップを逃しましたか?

4

1 に答える 1