雖然沒有堆棧跟蹤,所以很難確定,但最終成爲我的問題。我正在記錄它,以防其他人遇到類似情況。
正如前面提到的,我正在創建後臺進程。這是我用他們:
老辦法:
我宣佈這個在我的位置管理器的頂部:
private var bgId: UIBackgroundTaskIdentifier!
然後,裏面locationManager(_:didUpdateLocations:)
,我包括這些行:
self.bgId = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { _ in
UIApplication.sharedApplication().endBackgroundTask(self.bgId)
}
這是爲了保持應用程序活着在後臺lon我認爲,因爲我在使用bgId
的單個參考,後臺任務將被覆蓋,並且只有一個會存在,無論位置更新有多頻繁。
新方法:
首先,我做了bgId
可選:
private var bgId: UIBackgroundTaskIdentifier?
然後,我取代了早期的代碼片段在locationManager(_:didUpdateLocations:)
本:
if self.bgId == nil {
self.bgId = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { _ in
if let bgId = self.bgId {
UIApplication.sharedApplication().endBackgroundTask(bgId)
self.bgId = nil
}
}
}
這可能是iOS實際上創造了大量的後臺進程,並沒有像我原先想象的那樣覆蓋它們。如果屬實,這種方法創建的流程就少得多。
進行此更改後,我不再看到蘋果徽標和重新啓動欄的「respring」效果,並且在執行過程中遇到了問題。
我認爲這是iOS的一個bug。 – Lumialxk
他們使用的是iOS 10嗎? –
至少有一個用戶在iOS 9上。我認爲這也是iOS的一個bug。但是如果我能找到觸發錯誤的東西,也許我可以避免這種情況,即使我自己沒有造成這種情況。 –