调用applicationDidEnterBackground后我有多少时间?

时间:2013-04-28 20:28:46

标签: ios background-process uiapplicationdelegate springboard

我想向远程服务器发送时间戳,并等待成功回调,然后在本地存储时间戳,如果远程服务器没有响应。

是否可以将其放入applicationDidEnterBackground实施中?

3 个答案:

答案 0 :(得分:6)

根据iOS开发人员库UIApplicationDelegate Protocol Reference

  

此方法的实现大约需要五秒钟   执行任何任务并返回。如果您需要额外的时间来执行   任何最终任务,您都可以从中请求额外的执行时间   系统通过调用beginBackgroundTaskWithExpirationHandler:。在   练习,你应该从applicationDidEnterBackground:as返回   尽快。如果方法在时间运行之前没有返回   你的应用程序被终止并从内存中清除。

     

您应该执行与调整用户界面相关的任何任务   在此方法退出之前,但其他任务(如保存状态)应该   根据需要移动到并发调度队列或辅助线程。   因为它可能是你开始的任何后台任务   applicationDidEnterBackground:直到该方法之后才会运行   退出,您应该在之前请求额外的后台执行时间   开始那些任务。换句话说,先打电话   beginBackgroundTaskWithExpirationHandler:然后在a上运行任务   调度队列或辅助线程。

所以你有大约 5秒来执行任何任务并返回“applicationDidEnterBackground”方法。

答案 1 :(得分:1)

如果你想在去往后台之前做任何网络工作,你应该要求beginBackgroundTaskWithExpirationHandler:加时间。

答案 2 :(得分:0)

您可以在dispatch_async中执行此操作,您可以等待服务器应答并对您的数据执行某些操作,但您无法停止输入后台...

试试这段代码

dispatch_queue_t savingQueue = dispatch_queue_create("savingQue", NULL);
dispatch_async(savingQueue, ^{

   //do something in bg.... 

    dispatch_async(dispatch_get_main_queue(), ^{


    });

});
dispatch_release(savingQueue);