【发布时间】:2021-03-02 12:48:22
【问题描述】:
我的 iOS 应用程序在进入后台时被终止。我在设备控制台中得到以下日志:
后台任务 160 (""),已在 30 多秒前创建。在后台运行的应用程序中,这会产生终止风险。请记住及时为您的任务调用 UIApplication.endBackgroundTask(_:) 以避免这种情况。
紧随其后
调用过期处理程序后后台任务仍未结束:。此应用程序可能会被系统终止。调用 UIApplication.endBackgroundTask(_:) 来避免这种情况。
应用程序在从后台恢复时终止并重新启动
新的指标套件后台退出数据 (iOS 14) 还报告 BackgroundTaskAssertionTimeoutExits 正在杀死我的应用
在 UIApplicationEndBackgroundTaskError 中断时,我得到以下回溯:
我自己没有实现任何后台任务,但应用程序中集成了一些第三方库。
调试的正确方法是什么?
【问题讨论】:
-
您能否使用排除过程来尝试确定哪些第三方库(如果有)可能对此负责?我不知道这些库是什么,也不知道将它们分离出来有多容易,但如果您可以一次尝试一个,或者一次添加一个,您也许可以缩小范围。跨度>
-
您可以尝试在将后台任务排队的方法(如 [UIApplication beginBackgroundTaskWithName:expirationHandler])上设置一个符号断点,然后运行您的应用程序以查看谁在添加后台任务。如果您没有使用明显的 API 捕获它,您可以尝试
break set -r BackgroundTask然后运行并禁用无意义 API 调用的位置,直到您点击正在注册此任务的位置。 -
@JimIngham,设备控制台日志:后台任务 160 ("
"),创建时间超过 30 秒。在后台运行的应用程序中,这会产生终止风险。请记住及时为您的任务调用 UIApplication.endBackgroundTask(:) 以避免这种情况。并且... 在调用过期处理程序后后台任务仍未结束: 。此应用程序可能会被系统终止。调用 UIApplication.endBackgroundTask(:) 来避免这种情况。但它在这里说“私人”。有没有办法让它打印实际名称而不是“私人”?