当应用程序进入后台时,系统会终止应用程序的所有线程。因此,在这种情况下,使用performSelector:withObject:afterDelay:方法将不会有任何作用。
如果要在应用程序进入后台后执行某些操作,您可以使用后台任务。
在后台运行任务的方法是使用UIApplication的beginBackgroundTaskWithExpirationHandler:方法,如下所示:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
__block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
// 如果系统没有在后台运行任务的时间到达前结束任务,则此块将被调用
[application endBackgroundTask:backgroundTaskIdentifier];
backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 在后台执行任务
[self test];
// 完成后台任务
[application endBackgroundTask:backgroundTaskIdentifier];
backgroundTaskIdentifier = UIBackgroundTaskInvalid;
});
}
请注意,对于后台任务,您应该尽可能短地运行任务,并尽快结束任务。否则,系统可能会终止您的应用程序来腾出空间给其他应用程序。