我想在300左右下载许多图像,并在UI中显示。
我有两个问题:
如果应用程序位于前台,并假设用户将其发送到后台模式(通过单击主页按钮),那么如何确保下载继续?
如果用户强制退出应用程序(双击主页按钮并从应用程序切换器轻扫应用程序),那么如何确保应用程序下载图像?
我一直在阅读有关背景的东西。很少有人说在2.情况下下载无法继续。
以下是我提到的链接:
http://www.appcoda.com/ios7-background-fetch-programming/ http://www.appcoda.com/background-transfer-service-ios7/ iOS Background downloads when the app is not active
我没有得到正确的方法来下载前景中的图像,后台/暂停,用户强制退出应用程序。我正在使用AFNetworking进行网络服务呼叫。
以下是我的代码:
我的图片详细信息就像上传到亚马逊的.json文件中的网址一样。要下载我做的文件,
[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://someurl/imageFile.json"]];
从这个文件中我读了图像的网址,并将它们与图像细节一起下载。这是一个很大的过程。我该如何处理?请帮忙..
答案 0 :(得分:2)
您的1个问题的解决方案如下:
后台会话可让您在应用未运行时在后台执行内容上传和下载。您可以通过在NSURLSessionConfiguration类上调用backgroundSessionConfiguration:方法来创建后台会话配置。
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
NSURLSessionConfiguration *sessionConfig;
float timeout = 5 * 60.0f;
BOOL iOS8OrNew = [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0;
if (iOS8OrNew) {
sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];
request.timeoutInterval = timeout;
}
else {
sessionConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:identifier];
sessionConfig.timeoutIntervalForRequest = timeout;
}
sessionConfig.HTTPMaximumConnectionsPerHost = 10;
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfig];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request];
[manager setDidFinishEventsForBackgroundURLSessionBlock:^(NSURLSession * _Nonnull session) {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.backgroundSessionCompletionHandler) {
void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler;
appDelegate.backgroundSessionCompletionHandler = nil;
completionHandler();
}
NSLog(@"All tasks are finished");
}];
在AppDelegate中添加以下代码:
- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler {
self.backgroundSessionCompletionHandler = completionHandler;
//add notification
[self presentNotification];
}
-(void)presentNotification{
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.alertBody = @"Download Complete!";
localNotification.alertAction = @"Background Transfer Download!";
//On sound
localNotification.soundName = UILocalNotificationDefaultSoundName;
//increase the badge number of application plus 1
localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
}
对于您的2解决方案
如果系统杀死您的应用并且您的后台会话具有有效下载,则您的下载将继续,系统将在下载完成后启动您的应用。但是,如果用户强制退出您的应用,则会取消所有任务。