基于位置跟踪的iOS全天候后台服务

基于位置跟踪的iOS全天候后台服务,第1张

概述我目前正在编写一个应用程序,它依赖于位置跟踪并将有关位置的数据发送到服务器.然而,问题是它必须每周7天,每天24小时运行,目前我遇到每2-3天发生一次的随机崩溃.我在后台不断运行应用程序所做的是将一个NSTimer放在beginBackgroundTaskWithExpirationHandler方法中,右边是applicationDidEnterBackground方法.计时器每分钟执行一次并停 我目前正在编写一个应用程序,它依赖于位置跟踪并将有关位置的数据发送到服务器.然而,问题是它必须每周7天,每天24小时运行,目前我遇到每2-3天发生一次的随机崩溃.我在后台不断运行应用程序所做的是将一个NSTimer放在beginBackgroundTaskWithExpirationHandler方法中,右边是applicationDIDEnterBackground方法.计时器每分钟执行一次并停止/启动位置服务.

Here is a sample crash log

代码基本上如下所示:

UIApplication *app = [UIApplication sharedApplication];__block uibackgroundtaskIDentifIEr bgTaskID = 0;bgTaskID = [app beginBackgroundTaskWithExpirationHandler:^{    NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 1 * 60.0 target: self selector: @selector(onTick) userInfo: nil repeats: YES];    [t fire];    if (bgTaskID != uibackgroundtaskInvalID){        [app endBackgroundTask: bgTaskID];        bgTaskID = uibackgroundtaskInvalID;    }}];

我正在使用GcdasyncSockets进行连接,每次调用的超时时间约为30秒.

我真的没有想法,崩溃发生的原因可能是什么?

解决方法 您的计时器可能在任务失效后启动(在[UIApplication sharedApplication]之后.backgroundTimeRemaining变为0).

问题是你不能让应用程序在后台持续运行.如果您希望每隔一段时间执行一次代码,您唯一的选择就是使用后台位置API,设置您的应用在其pList中使用位置背景模式.
您将获得CLLocationManagerDelegate回调,并且在调用这些方法时您有时间做一些工作.

有关后台模式,请参阅Apple文档:http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

和位置 – awarness手册:http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009497

总结

以上是内存溢出为你收集整理的基于位置跟踪的iOS全天候后台服务全部内容,希望文章能够帮你解决基于位置跟踪的iOS全天候后台服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1051936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存