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

Posted

技术标签:

【中文标题】当我在 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 【发布时间】:2017-10-17 08:40:36 【问题描述】:

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

【问题讨论】:

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

【讨论】:

以上是关于当我在 iOS 应用程序的后台任务(使用 GCD)中间按下 1 次主页按钮时,由于信号 9 而终止的主要内容,如果未能解决你的问题,请参考以下文章

上传大型视频iOS时延长后台任务超时时间[关闭]

iOS GCD的使用

iOS GCD使用指南

iOS实录:GCD使用小结

iOS GCD的使用

当我在小于 10 的 ios 版本中隐藏/显示导航栏时,应用程序在进入后台后卡住