【发布时间】:2013-04-28 20:28:46
【问题描述】:
我想给远程服务器发送一个时间戳,等待成功的回调,如果远程服务器没有响应,则将时间戳存储在本地。
我可以将其放入applicationDidEnterBackground 实现中吗?
【问题讨论】:
标签: ios background-process uiapplicationdelegate springboard
我想给远程服务器发送一个时间戳,等待成功的回调,如果远程服务器没有响应,则将时间戳存储在本地。
我可以将其放入applicationDidEnterBackground 实现中吗?
【问题讨论】:
标签: ios background-process uiapplicationdelegate springboard
根据 iOS 开发者库UIApplicationDelegate Protocol Reference
您实施此方法大约需要 5 秒时间 执行任何任务并返回。如果您需要额外的时间来执行 任何最终任务,您都可以从 系统通过调用 beginBackgroundTaskWithExpirationHandler:。在 练习,你应该从 applicationDidEnterBackground: 返回 尽快。如果方法在时间运行之前没有返回 你的应用程序被终止并从内存中清除。
您应该执行与调整用户界面相关的任何任务 在此方法退出之前,但其他任务(例如保存状态)应该 根据需要移动到并发调度队列或辅助线程。 因为它可能是您开始的任何后台任务 applicationDidEnterBackground: 在该方法之后才会运行 退出,您应该在之前请求额外的后台执行时间 开始这些任务。换句话说,首先调用 beginBackgroundTaskWithExpirationHandler: 然后在一个任务上运行 调度队列或辅助线程。
因此,您有大约 5 秒 来执行任何任务并在“applicationDidEnterBackground”方法中返回。
【讨论】:
如果您想在进入后台之前做任何网络工作,您应该向beginBackgroundTaskWithExpirationHandler: 请求额外的时间。
【讨论】:
试试这个代码
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);
【讨论】: