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是否应该启用,并启用它只是一件事。