Android服务startforeground LocationManager RequestLocationUpdate在设备睡眠时更新

Android服务startforeground LocationManager RequestLocationUpdate在设备睡眠时更新,android,service,gps,foreground,Android,Service,Gps,Foreground,我有一个作为前台服务运行的服务 startForeground(1234, notification); 在此服务中,我有一个runnable,应该每15分钟运行一次: private Runnable runnable = new Runnable() { @Override public void run() { Log.d("maw", "Gps::run"); if (Constants.checkInternet(getAppl

我有一个作为前台服务运行的服务

startForeground(1234, notification);
在此服务中,我有一个runnable,应该每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);
    }
};
当设备连接到Internet时,它会执行方法checkSheet()。 这种方法通过服务器检查一些东西,并根据结果启动GPS并跟踪设备的位置

locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIME, GPS_DISTANCE, this);
现在。。。在我们的测试中,这一切似乎都很好。但是用户也有问题,因为有时候他们只能在跟踪开始记录数小时后才能看到它

现在的问题是,这背后的原因是什么。 我猜他们不像我们的设备那样频繁地使用他们的设备,而且这些设备正在进入一种我们的测试设备从未进入过的休眠模式,因为我们更频繁地使用这些设备

一些问题: 对于前台服务: -当设备进入深度睡眠模式时,Runnable是否每15分钟停止运行一次? -当设备处于深度睡眠模式时,是否无法初始化locationManager.requestLocationUpdates?

请尝试使用,这样您的服务只需要在实际工作时存储在内存中。
或者您可以使用。

经过大量测试,runnable有时会崩溃并完全停止工作


在解决了这个问题后,现在看来,对于前台服务,Runnable会继续运行,locationManager.requestLocationUpdates会执行它应该执行的操作。

为什么不使用wake lock?你应该接受你的回答。实际上,这项服务几乎一直在工作。每15分钟,服务就会做一些事情。检查GPS是否应该启用,并启用它只是一件事。