【问题标题】:Terminated due to signal 9 when i pressing 1 time Home button in middle of background tasks (using GCD) in iOS app当我在 iOS 应用程序的后台任务(使用 GCD)中间按下 1 次主页按钮时,由于信号 9 而终止
【发布时间】:2017-10-17 08:40:36
【问题描述】:

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

【问题讨论】:

  • 听说App占用了过多的CPU时间或内存,然后系统将其杀死。
  • @YunCHEN 每次我只索引部分内容,例如在 320000 字的规模下,我只索引 500 字,但是通过每 500 字的索引,当我按 Home 时,它​​就被杀死了..跨度>
  • 提供索引的源代码,也许我们可以找到某个问题,或者提高性能。
  • 您是否尝试使用UIBackgroundTask,如下所述?

标签: ios background-thread


【解决方案1】:

你必须启动一个后台任务并在完成类似这样的工作后结束它

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 2016-06-26
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多