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

时间:2019-10-23 11:05:06

标签: ios core-location

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

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

- appDidFinishLaunching(options:)被调用。

  • 我开始LocationManager startUpdatingLocation()startMonitoringSignificantLocationChanges()

  • 位置信息已正确收集。

  • 一段时间后,我致电stopUpdatingLocation()

  • 我现阶段的程序不需要做任何事情,也不需要执行任何代码

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

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

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

我可以遵循哪些文档来支持预期的行为?

2 个答案:

答案 0 :(得分:7)

是的,这里的一切都可以期待。 J.D. Wooder删除了一个可以正确链接文档的答案:"Managing Your App's Life Cycle."通常,后台iOS应用不会被主动杀死。只有在需要系统资源时,它们才会被杀死。这是不可预测的,并且应用程序通常不会在发生applicationWillTerminate消息时收到(因为该应用程序通常此时尚未运行,并且不会被唤醒而杀死它)。您的应用程序应同时处理冷启动(appDidFinishLaunching)和热启动(applicationDidBecomeActive)。

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

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

答案 1 :(得分:2)

请查看iOS应用Life Cycle

appDidFinishLaunching will call only when app Launch,
applicationWillTerminate  - called when app terminate from background
applicationDidBecomeActive - Called when app comes to foreground from background