iOS后台模式:在后台运行位置更新后,该应用程序永不终止

use*_*414 3 core-location ios

我在后台运行位置更新。一切正常:

  • 在重要位置,该应用程序在后台启动

- appDidFinishLaunching(options:) 被称为预期。

  • 我开始LocationManager startUpdatingLocation()startMonitoringSignificantLocationChanges()

  • 位置已正确收集。

  • 过了一段时间,我打电话 stopUpdatingLocation()

  • 我的程序在此阶段无需执行任何操作,也无需执行任何其他代码

此时,程序保持空闲状态。applicationWillTerminate再也不会被调用。这是预期的吗?我希望该应用程序能够再次关闭,因为不需要位置更新。

预期的行为是什么?该应用程序应该关闭还是应该永远保持空闲状态?

一旦发生这种情况,则如果用户打开应用程序或再次收到重要位置,则appDidFinishLaunching(options:)不会调用,而是调用applicationDidBecomeActive

我是否可以遵循任何文档来支持预期的行为?

Rob*_*ier 7

是的,这里的一切都可以期待。JD Wooder删除了一个答案,该答案已正确链接了文档:“管理应用程序的生命周期”。通常,不会主动关闭后台iOS应用程序。只有在需要系统资源时,它们才会被杀死。这是无法预料的,​​并且应用程序通常不会applicationWillTerminate在发生时收到消息(因为该应用程序通常此时未运行,并且不会被唤醒而杀死它)。您的应用应同时处理冷启动(appDidFinishLaunching)和热启动(applicationDidBecomeActive)。

从头开始重新启动应用程序的成本很高,因此,如果没有资源压力,iOS宁愿将最近使用的应用程序保留在内存中。无所事事的应用非常便宜。保持周围。

请注意,iOS 13在后台杀死应用程序方面已变得更加积极,新手机上的大型摄像头正导致内存压力,它们也更快地杀死了应用程序,因此不要为在后台运行而感到不适很长时间。但这也是很正常的。