当iPhone睡觉时,保持应用内购买下载

时间:2012-03-23 10:03:44

标签: objective-c ios xcode ios4

当用户睡觉iPhone或应用程序进入后台模式时,我需要有关如何在我的应用程序下载中保留应用内购买项目的帮助。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

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

  

git clone   GIT中://github.com/jacekmigacz/BTWEH.git

...然后按 主页按钮 以触发 applicationDidEnterBackground:

想法是将您的下载任务委托给另一个特权线程,并将您的应用程序保持在后台状态,而不是让操作系统暂停它。