2

我想实现长时间运行的后台计时器,它定期将用户的位置发送到服务器。

为此,我设置location了模式UIBackgroundModes,并beginBackgroundTaskWithExpirationHandler在应用程序进入后台时调用。而对于CLLocationManager,我使用startUpdatingLocation方法(不想使用重大变化,因为我需要高精度定位)。

但是在应用程序进入后台大约 26 分钟后,它停止向服务器发送位置。但是应用程序没有崩溃,所以在我把应用程序带到前台后,它可以恢复它的计时器。

26 分钟来自实验,使用 iOS 6.1、iPhone 5。

这里有几个问题,

  1. 我不明白为什么它在 26 分钟而不是 10 分钟后暂停,这被称为后台任务的时间限制。

  2. 在 16 分钟之前,backgroundTimeRemaining方法返回双倍最大值。但在 16 分钟后,它会从 减少600,因此它会在 10 分钟后暂停后台任务。

我已经尝试beginBackgroundTaskWithExpirationHandler在到期处理程序内部调用,但没有用。

如果有人对这个问题有线索,将不胜感激。

4

2 回答 2

6

https://github.com/voyage11/Location

使用此代码。您可以设置要调用它的时间间隔。我尝试了很多代码,但我发现这是最准确且电池电量最少的问题。这对于后台定位服务也很棒。:)

于 2014-12-20T06:13:25.080 回答
-1

如果设置UIBackgroundModes成功,App可以在你移动的时候在后台长时间运行。但是,如果您停止移动超过 10 分钟(可能更久),应用程序将被系统暂停。如果位置更新,你的 App 会被唤醒,但是这个唤醒时间会很短,所以你必须调用 beginBackgroundTaskWithExpirationHandler方法来处理位置更新。

于 2014-12-20T03:14:55.690 回答