在我的一个应用程序中,我正在加载大量数据。在下载数据之前,我绝对不能指望用户将应用程序保持在前台。我只是使用以下代码在应用程序处于后台时获取数据下载。它工作正常:-)
请执行以下步骤:
1) 在 ViewController 的头文件中使用以下行
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
在 .m 文件中合成它。
2) 在 ViewDidLoad 中分配 UIBackgroundTaskIdentifier 如下:
self.backgroundTask = UIBackgroundTaskInvalid;
3) 使用以下代码行,这里我只是在 beginBackgroundTaskWithExpirationHandler: 块中保留 getDataFromServer 方法。
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
/* Here your downloading Code, let say getDataFromServer method */
[self getDataFromServer]; // Its dummy method
/* Your downloading Code End Here */
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
});
4) 如果要查看后台下载数据的剩余时间,请在 applicationDidEnterBackground:(UIApplication *)AppDelegate 的应用程序委托方法中包含以下行:
NSLog(@"Background time remaining = %.1f seconds", [UIApplication sharedApplication].backgroundTimeRemaining);