【发布时间】:2012-04-07 21:33:03
【问题描述】:
我需要有关如何在用户睡眠 iPhone 或应用程序进入后台模式时在我的应用程序下载中保留应用内购买项目的帮助。有人有什么想法吗?
【问题讨论】:
标签: objective-c ios xcode ios4
我需要有关如何在用户睡眠 iPhone 或应用程序进入后台模式时在我的应用程序下载中保留应用内购买项目的帮助。有人有什么想法吗?
【问题讨论】:
标签: objective-c ios xcode ios4
在 applicationDidEnterBackground: 中定义 BackgroundTaskWithExpirationHandler,如下所示:
// ...
UIBackgroundTaskIdentifier bti;
// ...
- (void)applicationDidEnterBackground:(UIApplication *)application {
bti = [application beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if(bti != UIBackgroundTaskInvalid) {
[application endBackgroundTask:bti];
bti = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// DO or CONTINUE RESUMED DOWNLOAD HERE
dispatch_async(dispatch_get_main_queue(), ^{
if(bti != UIBackgroundTaskInvalid) {
[application endBackgroundTask:bti];
bti = UIBackgroundTaskInvalid;
}
});
});
}
要查看它是如何工作的,请下载sample project我为你制作。
...然后按 Home 按钮 触发 applicationDidEnterBackground:。
想法是将您的下载任务委托给另一个特权线程,并将您的应用程序保持在后台状态,而不是让操作系统挂起它。
【讨论】: