0

在我的 iOS 应用程序中,我在后台线程中下载了大量数据。我需要做的是以某种方式检查用户何时重新打开应用程序,如果此任务仍在运行或已被取消。

例如,如果用户点击主页按钮,然后返回应用程序,线程将继续,这很好。但是,如果线程以某种方式被操作系统破坏了怎么办。我如何在应用程序简历上知道线程是否正在运行。

谢谢!

一些代码:

// Starts a background thread and also allows it to run in the background if the user exits app
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    UIBackgroundTaskIdentifier bgTask = 0;
    bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask:bgTask];
    }];

// Code here to run in background

// Tell the main thread its done, and also remove itself from background execution
dispatch_async( dispatch_get_main_queue(), ^{
    NSLog(@"Done with background thread");
    [self endBackgroundUpdateTask:bgTask];
});
4

1 回答 1

0

首先,当您的应用程序进入后台时,任何线程、前台或后台都将被挂起。当您过渡到后台以完成和清理时,您可以做一些事情来获得少量时间......但是当您的应用程序离开屏幕时,您肯定会关闭,“后台”线程与否。

这意味着您的下载将被暂停,您将不得不优雅地恢复并从中断的地方继续。为此,您应该研究 iOS 提供的技术,以便通知您进入后台并允许一些额外的时间来清理和保存一些可用于恢复的状态。

调查这个:

   beginBackgroundTaskWithExpirationHandler

然后使用 backgroundTimeRemaining 检查在您尝试在授予的额外时间内完成时还剩多少时间。很明显,您无法在分配的时间保存状态下完成并设置一个标志,指示您在重新启动时需要继续或重新开始。真的没有其他办法,因为 iOS 无法知道你是否完成了你想做的事情,这取决于你

于 2012-10-31T20:53:02.207 回答