我在我的应用程序中使用核心位置框架,并在 UIBackgroundMode 或必需的背景模式(在 Xcode 4.2 中)中设置位置字符串,以便didUpdateToLocation
在应用程序在后台运行时从方法获取更新的位置,并通过点击发送这个更新的位置到服务器didUpdateToLocation
核心定位框架方法内部的具体链接。
我的问题是应用程序在后台运行一段时间后是否会终止?
我在我的应用程序中使用核心位置框架,并在 UIBackgroundMode 或必需的背景模式(在 Xcode 4.2 中)中设置位置字符串,以便didUpdateToLocation
在应用程序在后台运行时从方法获取更新的位置,并通过点击发送这个更新的位置到服务器didUpdateToLocation
核心定位框架方法内部的具体链接。
我的问题是应用程序在后台运行一段时间后是否会终止?
不,没有为此定义具体时间。但应用程序肯定会根据某些参数终止 - 电池消耗、内存占用问题等。
在开发人员文档中明确提到 - “系统尽可能长时间地将暂停的应用程序保留在内存中,仅当可用内存量变低时才将其删除。保留在内存中意味着您的应用程序的后续启动速度要快得多。”
我确信这对作者没有用,因为这个问题是在 2012 年 6 月提出的,我在 2019 年 6 月给出了答案。这个答案可能对其他用户有用。
我发布此答案是因为每个人都说这是操作系统的默认行为,我们无法更改它....bla ....bla。
最近,我正在处理相同的要求。经过2-3周的努力,我做到了。对于其他用户,我为它创建了一个帮助类。在启用位置跟踪之前,我的应用程序永远不会被操作系统杀死。
您还可以验证操作系统永远不会杀死这个应用程序跟踪应用程序
使用HSLocationManager在活动和非活动状态下进行无限位置跟踪。
请参考我在应用商店中可用的应用(如果启用了位置跟踪,应用将永远不会被操作系统杀死)
位置管理器,允许每隔 n 秒以所需的位置精度获取后台位置更新。
优势:
如果位置管理器当前正在运行,操作系统将永远不会杀死我们的应用程序。
需要时定期进行位置更新(范围在 2 - 170 秒之间(受允许的最大后台任务时间限制))
可定制的定位精度和时间段。
低内存消耗(单例类)
由于以下原因,iOS 应用程序可能会终止:
您可能知道,从 iOS 4.x 开始,大多数情况下,当您退出 iOS 应用程序时,该应用程序并没有终止,而是被发送到后台。
However, there are times when the OS will terminate your app and generate a crash log if the app didn’t respond fast enough. These events correspond with the implementation of the following UIApplicationDelegate methods: - application:didFinishLaunchingWithOptions: - applicationWillResignActive: - applicationDidEnterBackground: - applicationWillEnterForeground: - applicationDidBecomeActive: - applicationWillTerminate:
在上述所有方法中,应用程序获得有限的时间来完成其处理。如果应用程序耗时过长,操作系统将终止应用程序。
iOS 4.x 支持多任务处理。如果应用程序阻止 UI 并停止响应,用户可以从主屏幕双击主页按钮并终止应用程序。
注意:您可能已经注意到,当您双击 Home 按钮时,您还会看到您过去运行的所有应用程序的列表。这些应用程序不一定在运行,也不一定会暂停。
通常,一旦用户点击 Home 按钮,应用程序会在后台停留大约 10 分钟,然后它会被操作系统自动终止。因此,您通过双击主页按钮看到的应用程序列表只是过去应用程序运行的列表。
在继承 UIViewController 时,您可能已经注意到 didReceiveMemoryWarning 方法。
任何在前台运行的应用程序在访问和使用内存方面都具有最高优先级。但是,这并不意味着应用程序会获得设备上的所有可用内存——每个应用程序都会获得一部分可用内存。
当总内存消耗达到一定水平时,操作系统会发出 UIApplicationDidReceiveMemoryWarningNotification 通知。同时,为应用程序调用了 didReceiveMemoryWarning。
此时,为了让您的应用程序继续正常运行,操作系统开始在后台终止应用程序以释放一些内存。终止所有后台应用程序后,如果您的应用程序仍需要更多内存,则操作系统将终止您的应用程序。
我已经看到后台位置更新将工作几个小时。但是,如果我去一个没有接收的地方,设备将停止发送 GPS 更新,当我去一个有接收的地方时它不会启动。这发生在大约 30 分钟后。
但是如果我添加这个,在 iOS6 中,应用程序不会终止
[locationManager setPausesLocationUpdatesAutomatically:NO];
快速回答几乎是不。请阅读以下内容以深入了解。
由于 iOS 设备上已启用多任务处理,因此 a) 您的应用程序获得了分配的内存量,并且 b) 设备限制了在任何给定时间发生的任务量,即使用内存的应用程序。如果您使用 iOS 设备并打开多个应用程序,您会开始注意到您首先打开的应用程序可能已被终止并从viewDidLoad
.
一般来说,如果您的应用程序是最近打开的应用程序(或者甚至在有人经常清除多任务菜单的手机上),可以肯定地说设备不会在后台终止您的应用程序。