【问题标题】:Does the iOS open all apps after a reboot?重启后iOS会打开所有应用程序吗?
【发布时间】:2021-12-18 19:27:40
【问题描述】:

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

我的手机已连接到 macOS 控制台。我过滤process:SomeAppName 重启后大约 1 分钟,我看到应用名称与该过滤器一起出现。

这是预期的吗?

【问题讨论】:

  • TIL:“任何具有后台权限的东西”。有记录吗?我想它必须这样做,所以它重新注册每个进程来监听事情,例如通知,位置跟踪。但这有必要吗?我的意思是,与应用程序在内存不足时注册静默通知的方式相同,在重新启动后无需启动应用程序的情况下,注册不能持久吗? FWIW 我看到重启后启动的这个应用程序:使用hotspotHelper
  • 没有。我还没有看到所有应用都打开了...
  • Re “热点助手”,我可以轻松想象他们正在使用后台定位服务作为触发器来确定新位置有哪些热点可用。后台定位服务可以配置为触发应用启动。
  • @Rob 请参阅support.apple.com/en-us/HT208086 操作系统会这样做。 “-您在控制中心打开 Wi-Fi。-您在设置 > Wi-Fi 中连接到 Wi-Fi 网络。-您步行或开车到新位置。-当地时间凌晨 5 点。-您重新启动设备。”即不需要进行位置跟踪
  • 不,我不是说NEHotspotHelper 是私有的。 (而且,是的,我不清楚您提到的“热点助手”是指NEHotspotHelper 的守护进程,还是您在谈论某个第三方应用程序。)无论如何,我是说 API/机制当设备重新启动时,该守护进程在内部使用来启动该进程是私有的。 (而且,如果我没有记错的话,这就是这个问题的意义所在,即为什么在手机重新启动时会启动该特定进程,更一般地说,是“所有应用程序”是否都重新启动。)

标签: ios console reboot application-lifecycle ios-background-mode


【解决方案1】:

它不会“打开所有应用程序”。但可以肯定的是,它可能会打开一些应用程序(例如,特别是在目标的“功能”下配置的某些“后台模式”)。请参阅About the Background Execution SequenceAbout the App Launch SequenceChoosing Background Strategies for Your App 和 WWDC 2020 Background execution demystified。这些都没有列举应用程序可以在后台自动启动的具体情况,但可能是您研究的起点。

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

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

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


你问:

应用启动后会被终止/暂停吗?

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

显然,当操作系统需要内存时,可以驱逐/抛弃暂停的应用程序。但这种优雅的终止与被“杀死”的应用程序截然不同。


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

在大多数情况下,系统不会在用户强制退出后重新启动应用程序。一个例外是定位应用程序,它在 iOS 8 及更高版本中在被用户强制退出后会重新启动。但是,在其他情况下,用户必须明确启动应用程序或重新启动设备,然后系统才能将应用程序自动启动到后台。在设备上启用密码保护时,系统不会在用户首次解锁设备之前在后台启动应用程序。

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

【讨论】:

  • 1.我不认为iOS15的东西与我自己提到的冷启动有关here:“重启后发生冷启动”我认为这只是在谈论用户在重启后打开。正确的? 2. 试图理解您分享的关于 App Lanch 的链接的措辞。以下是否意味着它不应该击中didFinishLaunching? “预热执行应用程序的启动序列,直到 main() 调用 UIApplicationMain(_:_:_:_:) 时(但不包括)”
  • 按照您所做的位置跟踪说明,hotspothelper 功能似乎在扫描 wifi 或连接到 wifi 网络时启动了一个被杀死的应用程序
  • 我知道后台抓取是什么。什么是“后台处理”?您是在谈论取代后台获取的新 API 吗?即BackgroundTask?
  • 是的,当我使用“后台处理”一词时,我指的是目标功能的“后台模式”中的那个特定复选框。而且,是的,此复选框与请求使用 BGProcessingTask 的权限相关联,这是您引用的链接中的两种后台任务之一。 (这个后台处理任务是后台获取任务的兄弟,BGAppRefreshTask。)
  • 简而言之,后台处理是用于耗时的任务,通常与网络无关。前面提到的Background execution demystified 视频介绍了这一点,前一年的Advances in App Background Execution 也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多