フォアグラウンド サービスとして実行されているサービスがあります。
startForeground(1234, notification);
このサービスには、15 分ごとに実行する必要があるランナブルがあります。
private Runnable runnable = new Runnable()
{
@Override
public void run()
{
Log.d("maw", "Gps::run");
if (Constants.checkInternet(getApplicationContext())) checkSheet();
handler.postDelayed(this, Constants.REFRESH_TIME);
}
};
デバイスがインターネットに接続されると、メソッド checkSheet() が実行されます。このメソッドは、サーバーでいくつかのものをチェックし、その結果に応じて GPS を起動し、デバイスの位置を追跡します。
locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIME, GPS_DISTANCE, this);
今...私たちのテストでは、これはすべて正常に機能しているようです。しかし、ログを開始してから数時間後にしかトレースが表示されない場合があるという点で、ユーザーには問題があります。
ここで問題になるのは、この背後にある理由は何かということです。彼らは私たちのデバイスほどデバイスを使用しておらず、デバイスはより頻繁にデバイスを使用するため、テストデバイスが決して入らないスリープモードになっていると推測しています
いくつかの質問: フォアグラウンド サービスの場合: - デバイスがより深いスリープ モードに移行すると、Runnable は 15 分ごとに実行を停止しますか? - デバイスがより深いスリープ モードにある場合、locationManager.requestLocationUpdates を初期化することはできませんか?