2015-06-25 32 views
0

无法确定应用程序终止时会发生什么。applicationWillTerminate进入后台

纵观苹果文档的applicationWillTerminate它说:

对于不支持后台执行或者是针对iOS的3.x或更早,当用户退出应用这种方法总是被调用关联的应用。对于支持后台执行的应用程序,当用户退出应用程序时,通常不会调用此方法,因为在此情况下应用程序只是移至后台。但是,此方法可能会在应用程序在后台运行(未挂起)并且系统因某种原因需要终止它的情况下调用。

支持后台执行的应用程序意味着什么?这是否意味着“背景”必须在应用程序的设置中启用,还是指的是旧版本的iOS?

为什么应用程序进入背景而不是终止?它会保持多久后台?

我想在我的解析后台更新的对象的时候,应用程序,我用这个进入的背景:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
     //End the Task 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     if([self getController]){     
      CatsViewController *catsViewController = [self getController]; 
      if(catsViewController.currentUser){      
       int count = (int)[MyViewController.currentUser.messages count]; 
       PFInstallation *currentInstallation = [PFInstallation currentInstallation]; 
       currentInstallation.badge = count; 
       [currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
        [application endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid; 
       }];      
      }     
      else{      
       [application endBackgroundTask:bgTask]; 
       bgTask = UIBackgroundTaskInvalid; 
      } 
     }    
     else{     
      [application endBackgroundTask:bgTask]; 
      bgTask = UIBackgroundTaskInvalid; 
     } 
    }); 
} 

从现在看来,这文件是不是100%,这将被调用时,一个应用程序被刷到终止。如果是这种情况,那我该如何保存我的数据?

+0

背景的意思。 iOS已经引入了一些可以在后台工作的功能,如“获取设备位置”等。 –

+0

因此,这并不意味着该应用必须为特定应用启用后台应用刷新功能? – Kex

+0

@Kex no;这只是一种特殊的背景执行。但你需要使用其中之一。常见问题:你实际上想要达到什么目标?在任何情况下,没有收到'applicationWillTerminate'都不应该是个问题。 – Tommy

回答

1

从> = ios4当您按下home按钮时,您的应用程序将处于挂起状态。这意味着该应用程序不再运行,但它继续占用一定量的系统内存,以便在前台快速恢复。
来自> = ios4 Apple仅为特定类型的应用引入了真实背景执行,例如:位置更新,IP语音等。您可以通过查看项目功能 - >背景模式来获得完整列表。如果您的应用程序需要在后台工作,则必须符合其中一项要求,并且您应该在项目plist中指定此要求。
这些类型的应用程序有一些特权。如果系统内存不足并且前台应用程序需要的内存数量多于可用数量,系统将首先杀死暂停的应用程序,如果仍然需要更多内存,则它只会杀死在后台工作的应用程序。在这种情况下,调用-applicationWillTerminate
此方法也被不支持挂起或背景模式的应用程序调用。

+0

因此,如果应用程序适用于> = iOS4,可以安全地说,在刷卡退出应用程序时将调用applicationDidEnterBackground? – Kex

+1

不,一旦按下主页按钮或快速将应用程序与另一个按钮切换,就会调用此方法。滑动杀死了应用程序,但我应该已被暂停或在后台。 – Andrea

+0

当我测试它,双击和滚动aps(但不是选择一个)不会调用此方法,但它被称为应用程序被刷卡杀死。 – Kex