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

时间:2012-06-07 05:42:31

标签: ios ios5 core-location uiapplicationdelegate background-task

我正在我的应用程序中使用核心位置框架,我在UIBackgroundMode中设置位置字符串或在Xcode 4.2中设置所需的后台模式,以便在应用程序在后台运行时从didUpdateToLocation方法获取更新的位置并发送通过点击核心位置框架的didUpdateToLocation方法中的特定链接,将此更新的位置发送到服务器。

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

5 个答案:

答案 0 :(得分:10)

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

在开发人员文档中明确提到 - “系统会尽可能长时间地将暂停的应用程序保留在内存中,只有在可用内存量变低时才将其删除。内存中的剩余内容意味着后续启动应用程序的速度要快得多。“

详细了解 - http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

答案 1 :(得分:1)

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

但是如果我添加它,在iOS6中,应用程序将不会终止

[locationManager setPausesLocationUpdatesAutomatically:NO];

答案 2 :(得分:1)

iOS应用可能因以下原因而被终止:

  1. 看门狗超时
  2.   

    正如您可能已经意识到的那样,自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:
    
         

    在上述所有方法中,应用获得的时间有限       完成处理。如果应用程序耗时太长,操作系统会       终止应用程序。

    1. 用户强制退出
    2.   

      iOS 4.x支持多任务处理。如果应用程序阻止用户界面并停止   响应,用户可以从主页双击主页按钮   屏幕并终止应用程序。

           

      注意:您可能已经注意到,当您双击“主页”按钮时,   您还会获得您过去运行的所有应用程序的列表。   这些应用程序不一定是运行的,也不一定是必须的   暂停。

           

      通常一个应用程序大约需要10分钟才能留在后台一次   用户点击“主页”按钮,然后终止   由操作系统自动完成。所以您看到的应用列表   双击“主页”按钮只是过去应用程序运行的列表。

      1. 低内存终止
      2.   

        当继承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类)

  •