在后台模式下运行网络连接

时间:2015-02-16 12:15:10

标签: ios objective-c uiapplication

我有这个代码,即使应用程序处于后台模式(最小化应用程序),也会发送数据并接收:

MyViewController.m

    -(void)viewDidAppear:(BOOL)animated{
        [self doUpdateEvenAppMinimized];
    }

    - (void) doUpdate{

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            [self beginBackgroundUpdateTask];

            [self sendFilesToServer];//Inside this method have a sleep that call every 5 minutes

//The code used in sendFilesToServer is the same in this website https://dcraziee.wordpress.com/2013/05/29/how-to-upload-file-on-server-in-objective-c/

            //[self endBackgroundUpdateTask];//This method is forever...so I not need to call this line
        });

    }
    - (void)beginBackgroundUpdateTask{ 
    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{   
    [self endBackgroundUpdateTask];
    }];
    }

    - (void) endBackgroundUpdateTask{

    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
    self.backgroundUpdateTask = UIBackgroundTaskInvalid;

    }

文档说最长时间是10分钟,要删除它我使用实现长期运行任务的概念,为此,我选择我的项目>能力>背景模式(开启)>外部附件通信(已检查)。

通过这些步骤,我的申请将在10分钟内免除?

1 个答案:

答案 0 :(得分:2)

试图规避在后台运行的规则听起来像是错误的方法。请考虑将NSURLSession用于与应用的生命周期无关的长时间运行的网络操作。