【问题标题】:My iphone app background process terminates after 10 mins我的 iphone 应用程序后台进程在 10 分钟后终止
【发布时间】:2014-04-22 14:23:02
【问题描述】:

我遇到了一个问题,我的应用程序在后台运行超过 10 分钟,我已经实现了后台任务,它将立即获取通知。

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

我的代码如下

-(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
}

提前致谢

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    这是正常的。您不应该在后台运行计时器。在 iOS7 及更高版本上,您应该使用后台获取模式来获取数据(或使用推送正确执行)。

    阅读here 了解有关 iOS7 后台模式的更多信息。

    请注意,在 iOS7 及更高版本上,后台任务甚至更短(约 30 秒)而不是 10 分钟,因此更不鼓励您使用该 API 进行此类工作。

    【讨论】:

    • @S.P 没有解决方案。您可以实现推送,当用户点击推送通知时,应用可以打开并加载所有待处理的数据。
    【解决方案2】:

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

    有不同类型的后台模式,有些执行设定的任务并在完成或超时时暂停,有些则定期运行。

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

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

    【讨论】:

      【解决方案3】:

      您应该使用 Push Notifications 而不是每 5 分钟获取一次。它可以即时工作,不会耗尽电池电量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多