的Android服务startforeground的LocationManager requestLocationUpdates当设备处于睡眠状态

问题描述:

我有正在运行作为前台服务的Android服务startforeground的LocationManager requestLocationUpdates当设备处于睡眠状态

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

为什么不使用唤醒锁? [PowerManager.WakeLock](http://developer.android.com/reference/android/os/PowerManager.WakeLock.html) – Utisevalec 2013-05-07 13:47:48

+0

您应该接受您的回答 – 2013-07-13 21:05:03

尝试使用AlarmManager,因此您的服务只有在实际工作时才需要在内存中。 或者您可以使用wakelock

+0

服务实际上几乎一直在运转。服务每15分钟做一次。 检查GPS是否应该启用,并启用它只是1件事。 – Knarf 2013-05-07 14:50:28

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

现在解决了这个问题之后,似乎对于前台服务来说,Runnable不会继续运行,并且locationManager.requestLocationUpdates确实会做它应该做的事情。