我目前正在編寫一個應用程序,它依賴於位置跟蹤並向服務器發送有關位置的數據。但問題是,它必須全天候運行,目前我每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