Sri*_*aju 21 background objective-c download ios ios5
最初下载我的应用程序时,用户需要下载200MB(上限)的大文件.我绝对不能指望用户在下载此文件之前保持应用程序处于打开状态.所以他/她可能关闭应用程序,应用程序将进入后台.
如何在此方案中继续下载文件?这在iOS中甚至可能吗?
Sau*_*abh 39
在下面添加你的 - (void)applicationDidEnterBackground:(UIApplication *)application
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
Run Code Online (Sandbox Code Playgroud)
你很高兴...我在我的一个已发布的下载管理器应用程序中有这个
这将工作得很好.你也可以查看你有多少时间,因为苹果只能启用10分钟的后台任务.使用:
NSTimeInterval ti = [[UIApplication sharedApplication]backgroundTimeRemaining];
NSLog(@"backgroundTimeRemaining: %f", ti); // just for debug
Run Code Online (Sandbox Code Playgroud)
即使应用程序被暂停,您也可以使用iOS 7.0及更高版本中引入的NSURLSession继续上传/下载文件.
NSURLSession类和相关类提供用于下载内容的API.此API提供了一组丰富的委托方法,用于支持身份验证,并使您的应用能够在您的应用未运行时执行后台下载,或者在iOS中,当您的应用暂停时执行后台下载.
和
通过后台会话,您可以在应用未运行时在后台执行内容的上传和下载.您可以通过在NSURLSessionConfiguration类上调用backgroundSessionConfiguration:方法来创建后台会话配置 .
这个链接使用NSURLSession的一个很酷的教程.
小智 6
开始下载时可以启动后台任务:
转换到后台的应用可以请求额外的时间来完成任何重要的最后一分钟任务.
但是,这样的任务仅限于系统未定义的执行时间.但是,在这种情况下,200Mb文件下载可能是一个太大的任务.
在我的一个应用程序中,我正在加载大量数据.在下载数据之前,我绝对不能指望用户将应用程序保持在前台.我只是使用以下代码在应用程序处于后台时下载数据.它的工作正常:-)
请按以下步骤操作:
1)在ViewController的头文件中使用以下行
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
Run Code Online (Sandbox Code Playgroud)
在.m文件中合成它.
2)在ViewDidLoad中分配UIBackgroundTaskIdentifier,如:
self.backgroundTask = UIBackgroundTaskInvalid;
Run Code Online (Sandbox Code Playgroud)
3)使用以下代码行,这里我只是在beginBackgroundTaskWithExpirationHandler:block中保留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;
});
Run Code Online (Sandbox Code Playgroud)
4)如果要检查后台下载数据的剩余时间,请在applicationDidEnterBackground中包含以下行:AppDelegate的(UIApplication*)应用程序委托方法:
NSLog(@"Background time remaining = %.1f seconds", [UIApplication sharedApplication].backgroundTimeRemaining);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31812 次 |
| 最近记录: |