我正在我的应用程序中使用核心位置框架,我在UIBackgroundMode中设置位置字符串或在Xcode 4.2中设置所需的后台模式,以便在应用程序在后台运行时从didUpdateToLocation
方法获取更新的位置并发送通过点击核心位置框架的didUpdateToLocation
方法中的特定链接,将此更新的位置发送到服务器。
我的问题是,应用程序会在一段时间后在后台运行时被终止吗?
答案 0 :(得分:10)
不,没有为此定义具体时间。但是应用程序肯定会根据某些参数终止 - 电池耗尽,内存占用问题等。
在开发人员文档中明确提到 - “系统会尽可能长时间地将暂停的应用程序保留在内存中,只有在可用内存量变低时才将其删除。内存中的剩余内容意味着后续启动应用程序的速度要快得多。“
答案 1 :(得分:1)
我已经看到后台位置更新将会工作几个小时。但是,如果我去一个没有接收的地方,设备将停止发送GPS更新,当我去接待处的地方时它不会启动。这种情况发生在大约30分钟后。
但是如果我添加它,在iOS6中,应用程序将不会终止
[locationManager setPausesLocationUpdatesAutomatically:NO];
答案 2 :(得分:1)
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支持多任务处理。如果应用程序阻止用户界面并停止 响应,用户可以从主页双击主页按钮 屏幕并终止应用程序。
注意:您可能已经注意到,当您双击“主页”按钮时, 您还会获得您过去运行的所有应用程序的列表。 这些应用程序不一定是运行的,也不一定是必须的 暂停。
通常一个应用程序大约需要10分钟才能留在后台一次 用户点击“主页”按钮,然后终止 由操作系统自动完成。所以您看到的应用列表 双击“主页”按钮只是过去应用程序运行的列表。
当继承UIViewController时,你可能已经注意到了 didReceiveMemoryWarning方法。
在前台运行的任何应用都具有最高优先级 访问和使用内存的条款。但是,这并不意味着 应用程序获取设备上的所有可用内存 - 每个应用程序获得一个 可用内存的一部分。
当总内存消耗达到一定水平时,操作系统发出一个 UIApplicationDidReceiveMemoryWarningNotification通知。在 同时,为应用程序调用didReceiveMemoryWarning。
此时,您的应用程序将继续正常运行,即操作系统 开始在后台终止应用程序以释放一些内存。一旦 如果您的应用仍需要更多,则所有后台应用都会终止 内存,操作系统终止你的应用程序。
答案 3 :(得分:0)
快速回答几乎没有。请仔细阅读以下内容。
由于已在iOS设备上启用了多任务处理,a)您的应用程序获得了内存分配量; b)设备限制了在任何给定时间发生的任务(即使用内存的应用程序)的数量。如果您使用iOS设备并打开多个应用,您将开始注意到您首先打开的应用可能已被终止并从viewDidLoad
重新加载。
通常可以肯定地说,如果您的应用是最近打开的应用(或者甚至是经常清除多任务菜单的手机),设备将不在后台终止您的应用。< / p>
答案 4 :(得分:0)
我确信这对作者很有用,因为该问题是在2012年6月提出的,我将在2019年6月给出答案。该答案可能对其他用户有用。
我之所以发布此答案,是因为大家都说这是操作系统的默认行为,我们无法更改它。...bla .... bla。
最近,我正在处理相同的要求。经过2-3周的努力,我做到了。对于其他用户,我为其创建了一个帮助器类。在运行位置跟踪之前,我的应用永远不会被操作系统杀死。
使用HSLocationManager在有效和无效状态下进行无限位置跟踪。
请参阅我在应用商店中可用的应用(如果运行位置跟踪,则应用将不会被操作系统杀死):Capchur。
位置管理器,可让每个位置获取后台位置更新 n秒,并具有所需的定位精度。
优势:
如果位置管理器当前处于运行状态,则操作系统将永远不会杀死我们的应用程序 正在运行。
在需要时定期提供位置更新(范围介于2- 170秒(受允许的最大后台任务时间限制)
可自定义的位置准确性和时间段。
低内存消耗(Singleton类)