由于看门狗,我的应用程序从后台返回时崩溃

Posted

技术标签:

【中文标题】由于看门狗,我的应用程序从后台返回时崩溃【英文标题】:my app crash when it return from background because of watchdog 【发布时间】:2020-11-11 22:21:45 【问题描述】:

异常类型:EXC_CRASH (SIGKILL) 异常代码: 0x0000000000000000, 0x0000000000000000 异常说明: EXC_CORPSE_NOTIFY 终止原因:命名空间 SPRINGBOARD,代码 0x8badf00d 终止说明:SPRINGBOARD,场景更新看门狗 违规:应用程序cbundlename>:354 用尽真实(墙 时钟)10.00 秒的时间允许 | ProcessVisibility:前景 |进程状态:正在运行 | WatchdogEvent: 场景更新 | WatchdogVisibility: 背景 | WatchdogCPUStatistics: ( | "Elapsed 总 CPU 时间(秒):9.630(用户 9.630,系统 0.000),6% CPU",| “经过的应用程序 CPU 时间(秒):1.088,1% CPU”| ) 触发 按线程:0

CLIENT 有时会发生这种情况,我几乎无法重现,而且我没有遇到任何崩溃 既不在 Xcode 管理器中也不在 Crashlytics 中 我可以从设备->设置->隐私->分析中获取日志 我非常努力地消除所有内存泄漏并清理主线程,因为我可以将任务移动到DispatchQueue.background 另外,我已经从 AppDelegate 函数中清除了逻辑 它仍然会发生。

请指教!

【问题讨论】:

当应用回到前台时你在执行什么代码? 重新登录 websoket ,设置定时器每 30 分钟调用一次 您可以尝试禁用看门狗吗?毕竟,它不应该帮助您调试耗时过长的进程吗?所以从技术上讲,你在生产应用中不需要它。 【参考方案1】:

代码 0x8badf00d 是当应用程序启动或终止时间过长时看门狗引发的错误代码。

通常,这意味着您要么在某处有一个无限循环,要么您正在等待主线程上的网络 IO。用户也有可能强制退出应用程序。

您可以参考https://developer.apple.com/library/archive/qa/qa1693/_index.html Apple 的参考文档以了解更多详细信息以及在您的项目中处理这种情况的可能方法。

【讨论】:

我所有的网络都在 DispatchQueue.global(qos: .background).async

以上是关于由于看门狗,我的应用程序从后台返回时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式喂狗

Iphone,我怎样才能避免看门狗杀死我的应用程序需要很长时间才能启动?

SDRAM和重定位---看门狗详解

看门狗驱动程序

计算机高手解释一下硬件看门狗是什么意思?

看门狗 (监控芯片)