我有一个作为前台服务运行的服务
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);
}
};
当设备连接到internt时,它执行方法checkSheet()。 此方法使用服务器检查某些内容,并根据结果启动GPS并跟踪设备的位置。
locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIME, GPS_DISTANCE, this);
现在......在我们的测试中,这一切看起来都很好。但是用户遇到了问题,因为有时他们只能看到应该开始记录后的跟踪小时数。
现在的问题是这背后的原因是什么。 我猜他们不会像我们的设备一样使用他们的设备,并且设备进入睡眠模式我们的测试设备永远不会进入,因为我们更频繁地使用设备
一些问题: 对于前台服务: - 当设备进入深度睡眠模式时,Runnable是否每15分钟停止运行一次? - 当设备处于更深的睡眠模式时,是否无法初始化locationManager.requestLocationUpdates?
答案 0 :(得分:1)
尝试使用AlarmManager,因此您的服务只需在实际工作时才能在内存中。 或者您可以使用wakelock。
答案 1 :(得分:0)
经过大量测试后,看起来可运行的飞机有时会坠毁并完全停止工作。
现在解决了这个问题后,似乎对于前台服务,Runnable确实在继续运行,而locationManager.requestLocationUpdates确实做了它应该做的事情。