Ios 我的iphone应用程序后台进程在10分钟后终止

Ios 我的iphone应用程序后台进程在10分钟后终止,ios,objective-c,Ios,Objective C,我一直面临一个问题,我的应用程序没有运行后台超过10分钟,我已经实现了后台任务,将立即获取通知 我的应用程序后台任务在10分钟后停止,我已经推荐了和的解决方案,但它似乎没有帮助 我的代码如下 -(void)methodBGTask :(UIApplication *)application{ if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if

我一直面临一个问题,我的应用程序没有运行后台超过10分钟,我已经实现了后台任务,将立即获取通知

我的应用程序后台任务在10分钟后停止,我已经推荐了和的解决方案,但它似乎没有帮助

我的代码如下

-(void)methodBGTask :(UIApplication *)application{

    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4
        if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
            //create new uiBackgroundTask
            __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
                [application endBackgroundTask:bgTask];
                bgTask = UIBackgroundTaskInvalid;
            }];
            //and create new timer with async call:
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                //run function methodRunAfterBackground
                NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(methodGetNotificatioin) userInfo:nil repeats:YES];
                [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
                [[NSRunLoop currentRunLoop] run];
            });
        }
    }
}


-(void)methodGetNotificatioin{
    //retrieve notifications from service
}

提前谢谢

这很正常。你不应该在后台运行计时器。在iOS7及更高版本上,您应该使用后台获取模式来获取数据(或者使用push正确地执行此操作)

有关iOS7后台模式的更多信息,请阅读


请注意,在iOS7及更高版本上,后台任务甚至更短(~30秒),而不是10分钟,因此您更不愿意将该API用于此类工作。

如果我没有弄错或误解您的问题,这是预期的行为。后台任务是有时间限制的,因此一个应用程序不会无限期地运行,也不会消耗电池电量和手机数据等资源

有不同类型的后台模式,一些执行设置的任务并在完成或超时时挂起,另一些定期运行

您可能希望实现后台抓取,操作系统将定期唤醒您的应用程序,允许它检查新内容,并执行快速数据抓取以从服务器获取最新数据


后台提取可以由在其有效负载中设置了“内容可用”标志的推送通知触发。操作系统在为应用程序安排后台抓取时会有选择性,并且通常会将它们合并在一起以提高效率。操作系统还将了解用户何时运行你的应用程序,并尝试在用户打开你的应用程序之前安排后台回迁,以便获得最新数据。

你应该使用每5分钟回迁一次。它可以动态工作,不会耗尽电池。

@s.p没有解决方案。您可以实现推送,当用户点击推送通知时,应用程序可以打开并加载所有挂起的数据。