gpt4 book ai didi

iOS全时后台服务-基于位置追踪

转载 作者:可可西里 更新时间:2023-11-01 05:42:14 27 4
gpt4 key购买 nike

我目前正在编写一个应用程序,该应用程序依赖于位置跟踪并将有关位置的数据发送到服务器。然而,问题在于它必须全天候 24/7 运行,目前我正在经历每 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 中使用 location 后台模式。您将获得 CLLocationManagerDelegate 回调,并且在调用这些方法时您有一些时间做一些工作。

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

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

关于iOS全时后台服务-基于位置追踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com