ios - applicationWillTerminate 进入后台

标签 ios objective-c

无法弄清楚应用终止时会发生什么。

查看 applicationWillTerminate 的苹果文档说:

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

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

为什么应用程序进入后台而不是终止?它会在后台保留多长时间?

我想在应用程序进入后台时更新我的​​ Parse 后端中的一个对象,我使用:

- (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% 会在滑动应用程序终止时调用它。如果是这种情况,我该如何保存我的数据?

最佳答案

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

关于ios - applicationWillTerminate 进入后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049504/

相关文章:

iphone - MKMapView 框架在 MKMapType 声明中没有 relief google-map 类型,但它可以工作

ios - 如何在类名中包含索引号

ios - UItableviewcontroller SizeToFit 不适用于 UILabel 字段

ios - 如何在启用allowsLinkPreview 的情况下在同一个WKWebView 中打开3D touch 弹出页面?

ios - 支持的平台、基础 SDK、仅构建事件架构设置在 pod 更新后恢复

ios - 在tableView中点击不同的行后在collectionView中显示不同的数组

ios - UITableView 插入行动画而不滚动

iphone - MapKit iPhone 显示缩放控件

iphone - 在 UIToolbar 中居中 UIBarButtonItem 并添加自定义文本

ios - Air iOS,Flash Pro,外接mp3无法播放