如何防止主线程ios杀死后台线程

Posted

技术标签:

【中文标题】如何防止主线程ios杀死后台线程【英文标题】:how to prevent main thread ios from killing background thread 【发布时间】:2013-09-02 00:56:00 【问题描述】:

我的AppDelegate 中有一个方法可以保存作为参数传递的NSManagedObjectContext。这个方法可以在主线程或后台线程上调用,我想确保当调用这个方法时,当用户终止程序或你有什么时,主线程不会在中途杀死它。执行该方法时,如何防止主线程杀死该线程?

我也想这样做以将数据写入 plist 文件——这也可能发生在主线程之外。

我通过 GCD 和 dispatch_async 完成所有后台工作

【问题讨论】:

【参考方案1】:

Brad Larson 对 this post 提出了一些建议,应该会对您有所帮助。

在您的 appDelegate 中,当您的应用被推送到后台时,它会调用 applicationDidEnterBackground。从这个例程中,您可以查看您的方法当前是否正在进行中,并且可以相应地执行。

根据您的任务运行所需的时间,有两种选择:

    如果所需时间明显少于 5 秒,您可以让 applicationDidEnterBackground 等到您的任务完成后再发布。如果您花费的时间超过 5 秒,您的应用就会被强制终止。

    如果可能需要一段时间,您可以尝试 beginBackgroundTaskWithExpirationHandler: 启动一个后台任务来完成您的任务。

【讨论】:

以上是关于如何防止主线程ios杀死后台线程的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在后台保存主线程 NSManagedObjectContext 更改

在没有服务的情况下杀死应用程序后如何在后台线程中运行代码?

跨线程合并更改时如何防止竞争条件?

无法从 iOS6 中的后台线程调用主线程上的代码

在后台线程执行硬任务,在主线程返回结果

在后台和主线程 ios 中执行