虽然没有堆栈跟踪,所以很难确定,但最终成为我的问题。我正在记录它,以防其他人遇到类似情况。
正如前面提到的,我正在创建后台进程。这是我用他们:
老办法:
我宣布这个在我的位置管理器的顶部:
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。但是如果我能找到触发错误的东西,也许我可以避免这种情况,即使我自己没有造成这种情况。 –