我有一個應用程序在前臺以及後臺使用位置更新。使用CoreLocation框架,我已經實現了該應用程序,以便每隔5分鐘將位置更新發送到服務器,並使用this代碼作爲參考。iOS爲什麼系統使用位於後臺的應用程序殺死應用程序
這在前臺運行良好,但是當應用程序進入後臺時,它會在30分鐘到一個小時後被操作系統殺死。我希望應用能夠獲得至少8小時的更新,即使在後臺也是如此。
此外,該應用程序每小時使用約10%的電池。這與應用程序在後臺死亡有關嗎?如果是這樣,那我該如何解決電池問題?否則,誰能告訴我這是什麼問題?
下面是崩潰日誌的設備:
Exception Type: 00000020
Exception Codes: 0x000000008badf00d
Exception Note: SIMULATED (this is NOT a crash)
Highlighted by Thread: 2
Application Specific Information:
<BKNewProcess: 0x17e74840; com.app.app; pid: 560; hostpid: -1> has active assertions beyond permitted time:
{(
<BKProcessAssertion: 0x17d78740> id: 560-C9E81E97-90D9-4F95-871E-3DC53372F302 name: Called by UIKit, from <redacted> process: <BKNewProcess: 0x17e74840; com.app.example; pid: 560; hostpid: -1> permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:560 preventSuspend preventIdleSleep preventSuspendOnSleep ,
<BKProcessAssertion: 0x17e6a870> id: 560-BD7B29FC-DABC-42FF-AF17-B277BDB1C59D name: Called by UIKit, from <redacted> process: <BKNewProcess: 0x17e74840; com.app.example; pid: 560; hostpid: -1> permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:560 preventSuspend preventIdleSleep preventSuspendOnSleep
)}
對於我用下面的功能,後臺任務:
func backgroundTask(){
var application=UIApplication.sharedApplication()
var background_task: UIBackgroundTaskIdentifier?
background_task = application.beginBackgroundTaskWithExpirationHandler({() -> Void in
application.endBackgroundTask(background_task!)
background_task = UIBackgroundTaskInvalid
})
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in
//run the app without startUpdatingLocation. backgroundTimeRemaining decremented from 600.00
self.locationManager.startUpdatingLocation()
while (true) {
//backgroundTimeRemaining time does not go down.
print("Background time Remaining: \(UIApplication.sharedApplication().backgroundTimeRemaining)")
NSThread.sleepForTimeInterval(1)
break
//wait for 1 sec
}
application.endBackgroundTask(background_task!)
background_task = UIBackgroundTaskInvalid
})
}
我已經更新了這個問題。擁有崩潰日誌。 – Poonam
8badf00d以「應用程序花費太長時間才能啓動,終止或響應系統事件而聞名」。 據我所知,從登錄線程2東西需要太長的時間來執行主線程,它會導致終止 –
以及如果您的應用程序不斷在後臺運行,爲什麼不考慮使用後臺模式。我認爲這比背景任務更好並保持較長的背景。 –