我目前正在编写一个应用程序,它依赖于位置跟踪并将有关位置的数据发送到服务器。然而,问题是它必须 24/7 运行,目前我遇到了每 2-3 天发生一次的随机崩溃。为了使应用程序在后台持续运行,我所做的是将 NSTimer 放在 applicationDidEnterBackground 方法旁边的 beginBackgroundTaskWithExpirationHandler 方法中。计时器每分钟执行一次并停止/启动定位服务。
代码基本上是这样的:
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 秒。
我真的没有想法,崩溃发生的原因可能是什么?