后台获取 iOS - 已终止的应用程序

Posted

技术标签:

【中文标题】后台获取 iOS - 已终止的应用程序【英文标题】:Background Fetch iOS - Terminated Apps 【发布时间】:2015-05-17 17:49:46 【问题描述】:

我想这可能会被安静地回答几次,但我仍然想澄清一些未知的情况。

我一直在为我的一个 ios 应用程序寻找 Background Fetch API。我从几篇文章中了解到,当操作系统决定检查后端服务器是否有任何新数据时,fetchNewDataWithCompletionHandler 将被调用(无论我们设置的自定义获取间隔如何)。文章和教程说只有当您的应用程序处于非活动/后台/暂停状态时才会调用它,而不是当用户从应用程序切换器强行终止应用程序时。

但我的问题是;

    在 WWDC 2013 视频中,讲师说:

有两个非常重要的场景需要测试,第一个场景是当 您的应用在后台启动以获取新内容,第二个是 您的应用在后台恢复以获取新内容。

我认为第二种情况是应用程序从后台/暂停状态恢复。但是第一个场景是什么?我们的应用程序将从哪个状态在后台“启动”以获取数据?从非运行状态?

    要测试后台获取,有两种选择,一种是使用“由于后台获取而启动”创建新方案,另一种是从调试/模拟后台获取。我认为第二个是在应用程序处于后台或挂起时模拟后台获取。但是第一种情况是什么?与应用程序何时未运行(从应用程序切换器中删除)有关吗?

有什么想法吗?

谢谢!!

【问题讨论】:

【参考方案1】:

第一种情况是您的应用当时没有运行。 iOS 已决定给您的应用一些运行时间,但您的应用尚未启动。

如果手机最近重新启动(因此您的应用从未启动过),或者您的应用很可能因其他事情需要内存而被终止,则可能会发生这种情况。如果用户启动了许多其他大型应用程序(例如游戏),那么您的应用程序最终会从内存中被逐出。

如果用户使用应用切换器关闭应用,这将永远不会发生;如果用户杀死了应用程序,那么 iOS 将不会重新启动它,因为它假定用户希望它保持死亡状态。

【讨论】:

以上是关于后台获取 iOS - 已终止的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

ios上针对“已终止应用程序”的后台http请求

在后台模式和终止模式下获取位置更新 IOS

Flutter 无法捕获已终止 ios 应用程序的通知

使用已终止的 IOS 处理通知

从后台唤醒应用程序 iOS

跟踪 iOS 应用程序在后台运行的时间