iOS 是否在重启后打开所有应用程序?

Does the iOS open all apps after a reboot?

我关闭了 iPhone。 然后我重新打开它。

我已将 phone 连接到 macOS 控制台。我按 process:SomeAppName 筛选 重启后大约 1 分钟,我看到应用程序名称与该过滤器一起出现。

这是预期的吗?

它不会“打开所有应用程序”。但当然,它可能会打开一些应用程序(例如,特别是在目标的“功能”下配置的某些“后台模式”)。参见 About the Background Execution Sequence, About the App Launch Sequence, Choosing Background Strategies for Your App, and WWDC 2020 Background execution demystified。 None 其中列举了应用程序可以在后台自动启动的具体情况,但可能是您研究的起点。

FWIW,每个目标“功能”»“后台模式”的行为都略有不同(即,一些导致应用程序在后台由某些系统事件触发重新启动,另一些则由 OS,例如,如果充电时在 wifi and/or 上,有些会在进程外收集数据并在用户启动应用程序时传送)。因此,您必须逐一检查这些单独的“后台功能”,看看哪些会导致应用程序在后台启动,哪些不会。

但是,如果某个应用启用了一项或多项后台功能,则可以轻松地重新启动它。 “后台获取”和“后台处理”是两个突出的例子,很容易导致应用程序在后台启动而无需用户干预。 background location services 可以任意配置(在位置更改时启动应用程序与在用户下次启动应用程序时提供位置更新)。对于这些背景模式中的每一种,它只是有所不同。作为一般规则,Apple 会尽可能提供进程外解决方案(以尽量减少在后台启动耗电的应用程序),但会提供在需要时在后台启动应用程序的方法。

过去,我们只会关注由于后台功能而启动的应用程序。但是,正如 About the App Launch Sequence 所说,iOS 15 使“可能启动哪些应用程序”的问题变得复杂,因为它具有“预热”功能。因此,这也可能导致应用程序在没有用户干预的情况下在后台启动。


你问:

Would the app get killed/suspended after getting launched?

作为一般规则,应用永远不会被“杀死”,除非您违反了后台执行的约定(例如,未能调用适合该后台服务的完成处理程序或阻塞主线程并被看门狗进程)。所有各种后台模式都有一些机制可以优雅地通知 OS 您的后台进程已完成,现在可以再次暂停该应用程序。但在 OS 杀死行为不当的应用程序的情况下,它通常不再参与未来的后台执行,这就是为什么优雅地完成后台进程如此重要的原因。

显然,当 OS 需要内存时,暂停的应用程序可以 evicted/jettisoned。但是这种优雅的终止与应用程序被“杀死”是非常不同的。


顺便说一句,为了澄清大多数后台服务不会启动被杀死的应用程序的观察结果,旧的“iOS 的应用程序编程指南”给了我们关于大多数后台服务不会再次启动的提示,但后台定位服务可能。该指南不再在 Apple 网站上找到,但这里是相关摘录:

In most cases, the system does not relaunch apps after they are force quit by the user. One exception is location apps, which in iOS 8 and later are relaunched after being force quit by the user. In other cases, though, the user must launch the app explicitly or reboot the device before the app can be launched automatically into the background by the system. When password protection is enabled on the device, the system does not launch an app in the background before the user first unlocks the device.

new documentation 验证后台定位服务“重新启动应用程序……即使在用户强制退出您的应用程序之后。”但这段较早的引述将这一观察置于更广泛的背景下。