watchOS 3应用程序在背景中似乎随机被杀死

时间:2016-09-16 11:04:45

标签: swift watch-os watch-os-3 wkrefreshbackgroundtask

我升级了watchOS应用程序以支持新的watchOS 3后台模式。大部分时间都完全正常。但更常见的是,我喜欢它被watchOS杀死,报告如下:

Incident Identifier: XXX
CrashReporter Key:   xxxx
Hardware Model:      Watch1,1
Process:             AppName App Extension [271]
Identifier:          com.example.app.appextension
Version:             171 (1.13)
Code Type:           ARM (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           <none> [0]


Date/Time:           2016-09-16 11:09:47.5463 +0200
Launch Time:         2016-09-16 11:05:19.6587 +0200
OS Version:          Watch OS 3.0 (14S326)
Report Version:      104

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Exception Note:  SIMULATED (this is NOT a crash)
Highlighted by Thread:  0

Application Specific Information:
<BKNewProcess: 0x14540580; com.example.app.appextension; pid: 271; hostpid: 104> has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x14550e20> id: 104-85D4A371-50C7-46D1-8674-8F664FB17511 name: CUP-DCE601C5-C370-4098-AAD5-76CB68EA95E3-com.example.app.appextension process: <BKNewProcess: 0x14540580; com.example.app.appextension; pid: 271; hostpid: 104> permittedBackgroundDuration: 30.000000 reason: complicationUpdate owner pid:104 preventSuspend  preventThrottleDownCPU  preventIdleSleep  wantsForegroundResourcePriority  preventSuspendOnSleep 
)}

Elapsed total CPU time (seconds): 2.040 (user 2.040, system 0.000), 7% CPU 
Elapsed application CPU time (seconds): 0.002, 0% CPU

经常发生约。我的最后一个命令运行30秒后(根据我的日志),但有时也更早,但几乎总是在我的任务完成后。我也正确地完成了task.setTaskCompleted()的任务(或者至少我认为是这样)。

似乎有些事情阻止了应用报告为“我已经完成”,但我无法弄清楚是什么。任何人都知道它可能是什么?我很乐意提供更多信息,但我不知道从哪里开始,因为问题不是真的可以重现。这种情况经常发生。

如果这很重要,我会使用NSURLDownloadSessionTask和后台会话来下载数据,但这似乎也可以在大多数情况下运行并完成(当然,除了网络错误之外),但是它与杀死之间没有相关性。应用)

编辑:

经过大量的调试,我似乎知道的更多,但仍然没有结论

当我的应用程序变为活动时,我的应用程序会在NSURLDownloadSessionTask后台会话中请求新数据。它还询问当前位置。所有这些都需要相当长的时间(总共最多20秒)。所以,当我现在离开应用程序时,这个任务仍然可以在后台运行。似乎工作也很好,因为我可以使用的背景时间是约。 30秒。

但是当我在这些任务完成之前关闭应用程序然后进入WKSnapshotRefreshBackgroundTask时,我会等到任务完成并发送.setTaskCompleted()。但在这种情况下,该应用程序似乎永远不会暂停。在这种情况下,无论是出现还是失败的ViewController都被调用,并且应用程序在30秒后被上述报告杀死。

当只有一个普通的WKSnapshotRefreshBackgroundTask进入而没有任何东西在运行时,一切正常,并且我会在调用时立即执行willDisappear .setTaskCompleted

我不知道,为什么在第一种情况下willDisappear不会被调用。看起来应用程序正在等待完成某些事情,但没有什么,afaik。而且我也不会使用这些任务更新界面,只需更新模型即可。

0 个答案:

没有答案