我在进入后台模式后正在完成一些任务。我只想在背景模式下做这些任务,所以我做了:
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground)
但是applicationState仅适用于iOS 4.0及更高版本......
我想知道这段代码如何在iOS 3上运行。
Thansk的帮助
Kheraud
答案 0 :(得分:9)
您可以使用-respondsToSelector:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(applicationState)] ){
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
}
您可以通过专门检查后台支持来确定是否可以使用多任务支持(即使运行iOS 4或更高版本的设备可能没有支持多任务处理的硬件):
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
您可以使用以下代码检索iOS版本(尽管您不应该依赖以下代码来推断后台支持):
float osVersion=[[[UIDevice currentDevice] systemVersion] floatValue];
最后,如果您想在进入后台模式后执行某些任务,您将需要利用以下事件:
- (void)applicationDidEnterBackground:(UIApplication *)application
..但请注意,您的时间将非常有限。你将有大约五秒的时间做任何你想做的事情。如果您需要更多,可以尝试向iOS寻求更多时间:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task.
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
请注意,在这种情况下,您可能会被iOS授予更多时间,但它仍然是一个有限长度的时间。
Apple的Executing Code in the Background值得一读。
答案 1 :(得分:0)
我发现此链接对于理解如何处理3.1和> 4.0 OS版本非常有用: