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

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

但是在应用程序进入后台运行大约26分钟后,它停止了向服务器发送位置信息的操作。但是该应用程序并未崩溃,因此在我将该应用程序置于前台之后,它可以恢复其计时器。

使用iOS 6.1,iPhone 5进行实验需要26分钟。

这里有一些问题,

  • 我不明白为什么它在26分钟而不是10分钟后挂起,这被称为后台任务的时间限制。
  • 在16分钟之前,backgroundTimeRemaining方法返回双倍最大值。但是16分钟后,它从600减小,因此它在10分钟后挂起了后台任务。

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

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

    最佳答案

    https://github.com/voyage11/Location

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

    10-07 12:58
    查看更多