2012-03-06 30 views
0

我的应用程序从服务器下载内容包,我希望在应用程序处于后台时继续下载。但是我想知道当应用程序移动到后台但在任务完成之前处理任务及其相关的UIBackgroundTaskIdentifier的正确方法,该应用程序再次移动到前台。当应用程序移动到后台时,应该如何处理后台任务,但在任务完成之前回到前台?

我有一个模型类,下载(使用NSURLConnection),它有一个UIBackgroundTaskIdentifier属性,该模型已注册UIApplicationDidBecomeActiveNotification和UIApplicationDidEncomeBackgroundNotification的通知中心。

我想打电话beginBackgroundTaskWithExpirationHandler的:通知处理程序UIApplicationDidBecomeActiveNotification因为当应用程序在前台,那么当应用程序移动到背景beginBackgroundTaskWithExpirationHandler已经下载开始我不之前调用下载开始不需要做任何事情,下载应该在后台继续。

对beginBackgroundTaskWithExpirationHandler的调用将UIBackgroundTaskIdentifier分配给模型的属性。

如果任务在后台完成,或者在完成之前耗尽时间,我将使用模型的UIBackgroundTaskIdentifer调用endBackgroundTask。然后,下一次应用程序进入前台时,beginBackgroundTaskWithExpirationHandler将被再次调用,并且将生成一个新的UIBackgroundTaskIdentifier并将其分配给该模型的属性。

但是我的问题是我应该怎么做,如果应用程序移动到后台,然后在任务完成之前返回到前台?如果我没有做任何特别的事情来处理这种情况,那么behginBackgroundTaskWithExpirationHandler将被再次调用,并且UIBackgroundTaskIdentifier属性的旧值将被覆盖。 我认为这是不好的?因此,在第二次调用beginBackgroundTaskWithExpirationHandler之前,是否需要在必要时调用endBackgroundTask?或者是否有取消方法,或一些推荐的最佳做法?

TIA

回答

0

您可以监听应用启动备份和提前终止你的任务:

//Observe the application becoming active 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(observer_UIApplicationDidBecomeActiveNotification:) name:UIApplicationDidBecomeActiveNotification object:nil]; 
相关问题