我目前正在编写一个应用程序,它依赖于位置跟踪并向服务器发送有关位置的数据。但问题是,它必须全天候运行,目前我每2-3天发生一次随机崩溃。我所做的让应用程序在后台运行不断,我将一个NSTimer放在beginBackgroundTaskWithExpirationHandler方法的右边,就是applicationDidEnterBackground方法。计时器执行每分钟并停止/启动位置服务。基于位置跟踪的iOS全职后台服务
代码基本上看起来像这样:
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秒的超时时间。
我真的没有想法,什么可能是崩溃发生的原因?
https://developer.apple.com/library/IOs/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide /ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html 此链接是多任务和背景资料的文档。它可能持有我们都在寻求的信息。 – Kaili
是的,我做了这个应用程序一次,你可能想要使用NSRunLoopCommonModes你的计时器 –
你看过WWCD 2010会议“在iOS 4中使用核心位置”和相关的示例应用程序“Breadcrumbs”? http://developer.apple.com/videos/wwdc/2010/他们描述了如何在不使用任何计时器技巧的情况下使用核心位置。 – Jenn