我想向远程服务器发送时间戳,并等待成功回调,然后在本地存储时间戳,如果远程服务器没有响应。
是否可以将其放入applicationDidEnterBackground
实施中?
答案 0 :(得分:6)
根据iOS开发人员库UIApplicationDelegate Protocol Reference
此方法的实现大约需要五秒钟 执行任何任务并返回。如果您需要额外的时间来执行 任何最终任务,您都可以从中请求额外的执行时间 系统通过调用beginBackgroundTaskWithExpirationHandler:。在 练习,你应该从applicationDidEnterBackground:as返回 尽快。如果方法在时间运行之前没有返回 你的应用程序被终止并从内存中清除。
您应该执行与调整用户界面相关的任何任务 在此方法退出之前,但其他任务(如保存状态)应该 根据需要移动到并发调度队列或辅助线程。 因为它可能是你开始的任何后台任务 applicationDidEnterBackground:直到该方法之后才会运行 退出,您应该在之前请求额外的后台执行时间 开始那些任务。换句话说,先打电话 beginBackgroundTaskWithExpirationHandler:然后在a上运行任务 调度队列或辅助线程。
所以你有大约 5秒来执行任何任务并返回“applicationDidEnterBackground”方法。
答案 1 :(得分:1)
如果你想在去往后台之前做任何网络工作,你应该要求beginBackgroundTaskWithExpirationHandler:
加时间。
答案 2 :(得分:0)
试试这段代码
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);