gpt4 book ai didi

iphone - iOS:防止系统发送低内存警告时卸载后台定位服务

转载 作者:行者123 更新时间:2023-11-29 11:19:08 25 4
gpt4 key购买 nike

我有一个在后台运行的位置服务,但我发现有时如果用户在前台运行许多其他应用程序,我的应用程序将被卸载。

使用 Instruments,我的应用目前在后台消耗了大约 1.2MB。具有空 View 的项目在后台消耗大约 600KB。我知道我有一些改进可以使它更接近最小值,但除此之外,我还能做些什么来防止我的应用程序被卸载?由于我的应用程序实际上在后台做一些“有用”的事情,是否有办法向系统表明这一点,以便我的应用程序优先于其他一些暂停的应用程序,例如不需要该内存的游戏?

有谁知道该算法在首先刷新哪些后台应用程序方面是如何工作的?是按内存使用顺序,按前台最旧打开的应用程序,按后台运行最旧的线程?

扩展问题:

在此服务场景中应该做出哪些正确的权衡?我可以将 CLLocation 移动到 AppDelegate 中。我是否应该在每次进入后台时强制我的 ViewController 卸载,这样我的后台内存使用量是绝对最小的,但权衡启动时间并强制重新加载缓存的 map 图 block ?或者我可以等到收到 didReceiveMemoryWarning 后再释放 viewController 吗?

如果我对终止应用程序的顺序有所了解,那将有助于做出正确的权衡。例如,是否有一种循环方法,其中最早挂起的应用程序首先收到警告。然后,如果系统仍然需要更多内存,它会再次出现,它会真正杀死吗?或者系统是否向应用程序发出内存警告,发现没有释放足够的内存并杀死应用程序,然后移动到下一个挂起的应用程序。还是按内存使用量排序?

在此主题上的任何最佳实践将不胜感激。

更新:

在花了半天时间将我的应用程序从 ARC & Storyboard 改回手动分配后,我仍然发现后台内存使用情况大致相同。即使我从 View 中删除所有 View Controller 并释放它们,系统仍然不会立即释放该内存。所以最后我的应用程序被杀死的可能性与我使用 ARC 时一样。更有趣的是,我的应用程序永远不会收到 didRecieveMemoryWarning,我的 viewDidUnload 也永远不会被调用,我的应用程序只是在没有通知的情况下被杀死。

幸运的是,有人在 Apple Developer 论坛上向我指出,如果启用了 MonitoringSignificantLocationChanges,即使我的应用程序被终止,它也会在发生重大位置变化时重新加载。

我只需要意识到我的应用程序可以从后台重新启动,并且必须使用 [[UIApplication sharedApplication] applicationState] 相应地处理该事件。

最佳答案

你无法阻止 iOS 终止你的应用程序,这就是系统的工作方式。如果出现内存不足警告,iOS 将终止某些在后台运行的应用程序。

提示只是让您的内存使用率尽可能低。

关于iphone - iOS:防止系统发送低内存警告时卸载后台定位服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com