iOS 后台模式:在后台 运行 位置更新后,应用程序永不终止
iOS Background Mode: After running location updates in the background, the app never terminates
我在后台运行位置更新。一切正常:
- 在重要位置,应用程序在后台启动
- appDidFinishLaunching(options:)
按预期调用。
我开始LocationManager startUpdatingLocation()
和startMonitoringSignificantLocationChanges()
位置收集正确。
一段时间后,我调用stopUpdatingLocation()
我的程序在这个阶段不需要做任何事情,也没有执行进一步的代码
此时程序保持空闲状态。 applicationWillTerminate
再也不会被调用。这是预期的吗?我希望该应用程序会再次关闭,因为不需要位置更新。
预期的行为是什么?该应用程序应该关闭还是应该永远闲置?
一旦发生这种情况,如果用户用户打开应用程序或再次接收到重要位置,则不会调用 appDidFinishLaunching(options:)
,而是调用 applicationDidBecomeActive
。
是否有我可以遵循的支持预期行为的文档?
是的,这里的一切都是意料之中的。 J.D 中有一个已删除的答案。正确链接文档的 Wooder:"Managing Your App's Life Cycle." 通常,后台 iOS 应用程序不会主动终止。它们仅在需要系统资源时被杀死。这是不可预测的,当它发生时,应用程序通常不会收到 applicationWillTerminate
消息(因为此时应用程序通常不是 运行,并且它不会被唤醒只是为了杀死它) .您的应用应同时处理冷启动 (appDidFinishLaunching
) 和热启动 (applicationDidBecomeActive
)。
从头开始重新启动应用程序的成本很高,因此 iOS 如果没有资源压力,更愿意将最近使用的内容保留在内存中。什么都不做的应用程序非常便宜。留在身边。
请注意,iOS 13 在后台杀死应用程序方面变得更加积极,并且新手机上的大型摄像头导致内存压力也会更快地杀死应用程序,所以不要长时间在后台使用 运行 太舒服了。不过也很正常。
请查看 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
我在后台运行位置更新。一切正常:
- 在重要位置,应用程序在后台启动
- appDidFinishLaunching(options:)
按预期调用。
我开始
LocationManager startUpdatingLocation()
和startMonitoringSignificantLocationChanges()
位置收集正确。
一段时间后,我调用
stopUpdatingLocation()
我的程序在这个阶段不需要做任何事情,也没有执行进一步的代码
此时程序保持空闲状态。 applicationWillTerminate
再也不会被调用。这是预期的吗?我希望该应用程序会再次关闭,因为不需要位置更新。
预期的行为是什么?该应用程序应该关闭还是应该永远闲置?
一旦发生这种情况,如果用户用户打开应用程序或再次接收到重要位置,则不会调用 appDidFinishLaunching(options:)
,而是调用 applicationDidBecomeActive
。
是否有我可以遵循的支持预期行为的文档?
是的,这里的一切都是意料之中的。 J.D 中有一个已删除的答案。正确链接文档的 Wooder:"Managing Your App's Life Cycle." 通常,后台 iOS 应用程序不会主动终止。它们仅在需要系统资源时被杀死。这是不可预测的,当它发生时,应用程序通常不会收到 applicationWillTerminate
消息(因为此时应用程序通常不是 运行,并且它不会被唤醒只是为了杀死它) .您的应用应同时处理冷启动 (appDidFinishLaunching
) 和热启动 (applicationDidBecomeActive
)。
从头开始重新启动应用程序的成本很高,因此 iOS 如果没有资源压力,更愿意将最近使用的内容保留在内存中。什么都不做的应用程序非常便宜。留在身边。
请注意,iOS 13 在后台杀死应用程序方面变得更加积极,并且新手机上的大型摄像头导致内存压力也会更快地杀死应用程序,所以不要长时间在后台使用 运行 太舒服了。不过也很正常。
请查看 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