我已经关闭了我的 iPhone。然后我重新打开它。
我的手机已连接到 macOS 控制台。我过滤process:SomeAppName
重新启动后大约 1 分钟,我看到应用程序名称出现在该过滤器中。
这是预期的吗?
我已经关闭了我的 iPhone。然后我重新打开它。
我的手机已连接到 macOS 控制台。我过滤process:SomeAppName
重新启动后大约 1 分钟,我看到应用程序名称出现在该过滤器中。
这是预期的吗?
它不会“打开所有应用程序”。但可以肯定的是,它可能会打开一些应用程序(例如,特别是在目标的“功能”下配置的某些“后台模式”)。请参阅关于后台执行序列、关于应用程序启动序列、为您的应用程序选择后台策略和 WWDC 2020后台执行揭秘。这些都没有列举应用程序可以在后台自动启动的特定情况,但可能是您研究的起点。
FWIW,每个目标“功能”»“后台模式”都有略微不同的行为(即,有些会导致应用程序在由某些系统事件触发的后台重新启动,有些则由操作系统自行决定启动,例如,如果在 wifi 和/或充电时,有些会在进程外收集数据并在用户启动应用程序时交付)。所以你必须一一检查这些单独的“后台能力”,看看哪些导致应用程序在后台启动,哪些没有。
但是,如果一个应用程序启用了一项或多项后台功能,它可以很容易地重新启动。“后台获取”和“后台处理”是两个突出的例子,它们很容易导致应用程序在后台启动而无需用户干预。后台位置服务可以通过任何一种方式进行配置(在位置更改时启动应用程序与在用户下次启动应用程序时提供位置更新)。它只是因这些背景模式而异。作为一般规则,Apple 会尽可能提供进程外解决方案(以最大限度地减少在后台启动应用程序的功耗),但提供在需要时在后台启动应用程序的方法。
过去,我们只关心由于后台功能而启动的应用程序。但是,正如About the App Launch Sequence所说,iOS 15 使“哪些应用程序可能会启动”的问题变得复杂,因为它具有“预热”功能。因此,这也可能导致应用程序在没有用户干预的情况下在后台启动。
你问:
应用程序在启动后会被杀死/暂停吗?
作为一般规则,应用程序永远不会被“杀死”,除非您违反了后台执行的约定(例如,未能调用适合该后台服务的完成处理程序或阻塞主线程并被看门狗进程杀死)。所有各种后台模式都有一些机制可以优雅地通知操作系统您的后台进程已完成并且应用程序现在可以再次暂停。但是在操作系统杀死行为不端的应用程序的情况下,它通常不再参与未来的后台执行,这就是优雅地完成后台进程如此重要的原因。
显然,当操作系统需要内存时,可以驱逐/抛弃暂停的应用程序。但这种优雅的终止与被“杀死”的应用程序截然不同。</p>
顺便说一句,为了澄清大多数后台服务不会启动被杀死的应用程序的观察,旧的“iOS 应用程序编程指南”向我们暗示了大多数后台服务不会再次启动,但后台定位服务可能会。该指南不再在 Apple 网站上找到,但以下是相关摘录:
在大多数情况下,系统不会在用户强制退出后重新启动应用程序。一个例外是定位应用程序,它在 iOS 8 及更高版本中在被用户强制退出后会重新启动。但是,在其他情况下,用户必须明确启动应用程序或重新启动设备,然后系统才能将应用程序自动启动到后台。在设备上启用密码保护时,系统不会在用户首次解锁设备之前在后台启动应用程序。
新文档验证了后台定位服务“重新启动应用程序……即使在用户强制退出您的应用程序之后”。但这个较早的引述将这种观察置于更广泛的背景下。