我的iOS应用程序严重依赖GPS,我尝试编写一种有助于节省电池的方法,但我收效甚微。
我创建了一个每 15 秒触发一次的 NSTimer。每次调用该方法时,它都会将 int 时间增加 1。如果 int 时间达到 20(5 分钟),它将关闭位置更新并将布尔值设置为 true。每次方法运行并且 int 时间超过 20 时,它都会将另一个 int int time2 增加 1。如果运行该方法并且 int time2 等于 4,它将再次启动位置更新并将 time2 设置为 0。
然后在位置管理器的didUpdateLocation:方法中,我有一个算法,该算法将首先检查bool isStop是否为真,如果为真,那么它将检查新位置的水平精度并确保它低于10。然后,它将使用名为坐标的位置对象检查 newLocation,并检查它们之间的距离是否大于 9 米。如果不是,它将再次停止位置更新并返回。如果是,它将继续使用另一种算法,在那里它将根据某些参数检查新的位置对象。如果它通过,坐标位置对象将使用新的位置对象进行设置,时间和 time2 ints 将设置为 0,isStop 将设置为 false,整个过程将重新开始。
简而言之,在没有位置更改的 5 分钟后,位置更新将停止,并每 1 分钟定期检查一次,以查看用户是否从之前通过所有要求的位置移动了至少 10 米。当用户移动得足够远时,它会重新开始该过程,并且用户在开始定期检查之前必须 5 分钟内不要移动 10 米或更多米。这背后的想法是,当用户移动不多时,每分钟只做几秒的检查,而不是不断运行位置服务。
现在,当位置更新停止时,这是我遇到的问题。当应用在后台运行时,NSTimer 停止运行。
我可以以某种方式安排一个后台任务来运行 1 分钟检查之间的循环吗?有人有更好的主意吗?或者对此的解决方案有任何想法?
不久前,我问了一个问题,其中包含了在后台运行GPS的所有不同方法。
CLLocationManager geo-fencecing/startMonitoringForRegion: vs. startMonitoringForImportantLocationChanges: vs. 10 分钟开始更新呼叫
您必须执行特定操作才能在后台维护GPS。 NSTimer 是不够的,因为您需要注册您的应用程序才能在十分钟后保持其在后台运行。您至少必须在后台每 10 分钟运行一次 GPS,以保持您的应用程序运行。
无论如何,上面帖子中的方法应该可以回答您的问题。