0

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

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?

4

2 回答 2

1

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

于 2013-05-07T13:52:33.553 回答
0

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

现在修复该问题后,对于前台服务,Runnable 确实继续运行,并且 locationManager.requestLocationUpdates 确实做了它应该做的事情。

于 2013-05-16T05:13:14.397 回答