当我在 iOS 应用程序的后台任务(使用 GCD)中按下 1 次主页按钮时,由于信号 9 而终止

Terminated due to signal 9 when i pressing 1 time Home button in middle of background tasks (using GCD) in iOS app

我想在每次用户 运行 应用程序时通过后台线程索引部分内容,但是当我在后台任务中间按 1 次主页按钮并且应用程序转到后台时,这条消息我收到:"Terminated due to signal 9"。 我想索引部分内容,当应用程序处于前台模式但处于后台线程时可能不会使应用程序崩溃。 我的主要问题是为什么应用程序在后台线程中的任务 运行ning 中间被杀死,即使该任务也只会在控制台中打印字符串! 我应该如何处理这种情况?

您必须启动后台任务并在完成工作后结束它,就像这样

var bgTask: UIBackgroundTaskIdentifier?

将 bgTask 添加为您的对象 属性 然后

let application = UIApplication.shared

bgTask = application.beginBackgroundTask(withName: "name", expirationHandler: {
    self.endBackgroundTask()
})

DispatchQueue.global(qos: .background).async {[weak self] in
    //do your stuff here

    self?.endBackgroundTask()
}

添加 endBackgroundTask() 方法

func endBackgroundTask() {
    if bgTask != UIBackgroundTaskInvalid {
        UIApplication.shared.endBackgroundTask(bgTask!)
        bgTask = UIBackgroundTaskInvalid
    }
}

您可以在此处阅读更多相关信息

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html