0

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

我可以付诸applicationDidEnterBackground实施吗?

4

3 回答 3

6

根据 iOS 开发者库UIApplicationDelegate 协议参考

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

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

因此,您有大约5 秒的时间来执行任何任务并返回“applicationDidEnterBackground”方法。

于 2014-03-13T02:22:18.953 回答
1

如果你想在进入后台之前做任何网络事情,你应该要求额外的时间beginBackgroundTaskWithExpirationHandler:

于 2013-04-28T22:18:41.890 回答
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);
于 2013-04-28T20:35:28.387 回答