ios会在特定时间后终止后台运行的应用程序吗?

ios会在特定时间后终止后台运行的应用程序吗?,ios,ios5,core-location,uiapplicationdelegate,background-task,Ios,Ios5,Core Location,Uiapplicationdelegate,Background Task,我在我的应用程序中使用核心位置框架,我在UIBackgroundMode或Required background Mode(在Xcode 4.2中)中设置位置字符串用于在后台运行应用程序时从didUpdateToLocation方法获取更新的位置,并通过点击核心位置框架的didUpdateToLocation方法中的特定链接将此更新的位置发送到服务器 我的问题是,应用程序是否会在后台运行一段时间后终止?否,没有为此定义具体时间。但应用程序肯定会根据某些参数终止-电池消耗、内存占用问题等 开发人员

我在我的应用程序中使用核心位置框架,我在UIBackgroundMode或Required background Mode(在Xcode 4.2中)中设置位置字符串用于在后台运行应用程序时从
didUpdateToLocation
方法获取更新的位置,并通过点击核心位置框架的
didUpdateToLocation
方法中的特定链接将此更新的位置发送到服务器


我的问题是,应用程序是否会在后台运行一段时间后终止?

否,没有为此定义具体时间。但应用程序肯定会根据某些参数终止-电池消耗、内存占用问题等

开发人员文档中明确提到:“系统将暂停的应用程序尽可能长时间地保留在内存中,只有在可用内存不足时才会删除它们。保留在内存中意味着后续启动应用程序的速度要快得多。”

仔细检查一下,以了解完整的细节-

快速回答基本上是否定的。但要深入了解,请阅读下面的内容

由于iOS设备已启用多任务处理,因此a)您的应用程序获得分配的内存量,b)设备限制在任何给定时间发生的任务量,即应用程序使用内存。如果您使用iOS设备并打开多个应用程序,您将开始注意到您首先打开的应用程序可能已被终止并从
viewDidLoad
重新加载


一般来说,如果您的应用程序是最近打开的应用程序(甚至是在手机上,有人经常清除多任务菜单),那么可以放心地说,该设备不会在后台终止您的应用程序。

我已经看到后台位置更新会持续几个小时。但是如果我去一个没有接收信号的地方,设备会停止发送GPS更新,当我去一个有接收信号的地方时,它不会启动。这在大约30分钟后发生

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:
但是如果我在iOS6中添加这个,应用程序将不会终止

[locationManager setPausesLocationUpdatesAutomatically:NO];

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支持多任务处理。如果应用程序阻止用户界面并停止 作为响应,用户可以从主页双击主页按钮 屏幕显示并终止应用程序

    注意:您可能已经注意到,当您双击Home(主页)按钮时, 您还可以获得过去运行过的所有应用程序的列表。 这些应用程序不一定在运行,也不一定在运行 暂停

    通常一个应用程序在后台停留大约10分钟一次 用户点击Home按钮,然后它被终止 由操作系统自动执行。因此,您所看到的应用程序列表 双击Home(主页)按钮只是过去应用程序运行的列表

  • 低内存终止
  • 当子类化UIViewController时,您可能已经注意到 我接受了记忆警告法

    在前台运行的任何应用程序在应用程序中都具有最高优先级 访问和使用内存的术语。然而,这并不意味着 应用程序获取设备上的所有可用内存–每个应用程序都有一个 可用内存的一部分

    当总内存消耗达到一定水平时,操作系统会发出 UIApplicationIDReceiveMemoryWarning通知。在 同时,应用程序会调用didReceiveMemoryWarning

    此时,为了让你的应用程序继续正常运行,操作系统 开始在后台终止应用程序以释放一些内存。一旦 如果您的应用仍需要更多,则所有后台应用都将终止 内存,操作系统将终止你的应用程序


    我确信这对作者没有用处,因为这个问题是在2012年6月提出的,我将在2019年6月给出答案。这个答案可能对其他用户有用

    我之所以发布这个答案,是因为每个人都说这是操作系统的默认行为,我们不能改变它……等等……等等。

    最近,我也有同样的要求。经过2-3周的努力 工作,我做到了。对于其他用户,我为其创建了一个助手类。我的 在启用位置跟踪之前,操作系统永远不会终止应用程序

    您还可以验证操作系统是否永远不会停止工作

    用于活动和非活动状态下的无限位置跟踪

    参考应用商店中提供的我的应用(如果启用位置跟踪,应用将永远不会被操作系统杀死)

    位置管理器,允许每天获取后台位置更新 n秒,具有所需的定位精度

    优势:

    • 如果位置管理器当前处于关闭状态,操作系统将永远不会关闭我们的应用程序 跑步

    • 在需要时定期进行位置更新(范围介于2- 170秒(受允许的最大后台任务时间限制))

    • 可定制的定位精度和时间周期

    • 低内存消耗(单例类)


    谢谢,这个链接非常有用。我想问的另一个问题是,我们是否需要DidUpdateLocation方法中的任何事件处理,因为当应用程序处于后台状态时,上述链接的给定文档中规定了“不处理事件时睡眠”。如果您对获取位置感兴趣,即使它处于睡眠状态,那么您需要使用此选项,当应用程序进入睡眠状态时?文档中指出,当应用程序处于后台时,UIBackgroundMode(位置)将在位置更新时通知应用程序。我想如果