终止前的iOS后台提取
我遇到的情况是,我必须在应用程序终止之前调用web服务,但在进入后台时不能调用,因为这应该只在应用程序终止时执行一次 我尝试了后台执行,但我相信一旦应用程序被终止,它将无法工作,但只有当应用程序在后台运行时 下面是我最近一次尝试的终止前的iOS后台提取,ios,objective-c,Ios,Objective C,我遇到的情况是,我必须在应用程序终止之前调用web服务,但在进入后台时不能调用,因为这应该只在应用程序终止时执行一次 我尝试了后台执行,但我相信一旦应用程序被终止,它将无法工作,但只有当应用程序在后台运行时 下面是我最近一次尝试的应用程序willterminate: __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
应用程序willterminate:
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
// Call web service here
[application endBackgroundTask:bgTask];
bgTask =UIBackgroundTaskInvalid;
});
你不能这么做,老实说,你为什么要这么做 无论如何,这是一个不适定问题。如果电池没电了怎么办?如果应用程序崩溃怎么办?如果应用程序转到后台,然后操作系统在内存压力增加时终止它,该怎么办?如果您无法访问互联网,应用程序被终止,该怎么办
你能做的最接近的事情就是实现某种心跳服务,你的应用程序会定期ping。如果ping停止,则表示您的应用程序已终止或网络连接丢失 我很难看到这种模式的任何好的用例。您能否提供详细信息,说明为什么您希望这样做?您实际上想要解决什么问题?您的web服务是异步的吗?如果是这样的话,那么您可能正在调用
endBackgroundTask
,然后它就完成了。还要注意,applocationWillTerminate
并不总是这样called@Eiko情况是,如果应用程序被终止,我想让用户自动脱机。您如何连接到服务器?如果存在打开的套接字,服务器无论如何都应该注意到。我仍然不明白这一点——对于用户来说,后台运行的应用程序和终止的应用程序看起来完全一样,用户无法在这些状态之间进行选择。所以它的感觉和行为应该是一样的。