iOS长时间运行的后台计时器,带有“位置”后台模式

时间:2013-03-27 00:50:15

标签: ios background

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

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

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

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

以下是一些问题,

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

  2. 在16分钟之前,backgroundTimeRemaining方法返回double max value。但是在16分钟后,它从600开始减少,因此它会在10分钟后暂停后台任务。

  3. 我已经尝试在过期处理程序中调用beginBackgroundTaskWithExpirationHandler,但没有用。

    如果有人对这个问题有所了解,将不胜感激。

2 个答案:

答案 0 :(得分:6)

https://github.com/voyage11/Location

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

答案 1 :(得分:-1)

如果您已成功设置UIBackgroundModes,则应用程序可以在您移动时在后台运行很长时间。但是,如果您停止移动超过10分钟(可能更多),该应用程序将被系统暂停。如果位置更新,您的应用程序将处于唤醒状态,但此唤醒时间将非常短,因此您必须进行校准 处理位置更新的beginBackgroundTaskWithExpirationHandler方法。