我在WatchOS 5中遇到WatchKit应用程序崩溃时出现问题。当我的系统调用我的应用程序让我更新复杂功能时,这种情况会在后台发生。
当我得到WKApplicationBackgroundRefreshTask时,会在后台调用此处的代码片段:
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let backgroundTask as WKApplicationRefreshBackgroundTask:
HealthController().updateComplicationData {
self.updateComplications()
if #available(watchOSApplicationExtension 4.0, *) {
backgroundTask.setTaskCompletedWithSnapshot(false)
} else { task.setTaskCompleted()}
}
问题是,我得到的崩溃基本上说:
[WKRefreshBackgroundTask dealloc]
所以我知道,如果HealthController()。updateComplicationData()函数返回时间太长,可能会发生这种情况。但崩溃并不意味着应用程序因cpu时间问题而被杀死。似乎实际的backgroundTask变量正在被释放,因此当backgroundTask.setTaskCompletedWithSnapshot(false)
调用发生时,我传递一个解除分配的对象。
有什么建议?
HealthController().updateComplicationData
产生的负荷?谢谢你的帮助!
我终于解决了这个问题,其他人都经历过这个问题!基本上,我在后台刷新中有一个奇怪的代码路径,偶尔会调用finishedBackgroundUpdate处理程序。因为这个WatchKit正在杀死该应用程序。现在全部解决了。