我正在建立一个通过ajax上传文件到服务器的应用程序。问题是,用户有时很可能无法连接到internet,而客户端希望在用户恢复连接时安排ajax调用。这可能是用户在离线时安排文件上传并关闭应用程序。是否可以在应用程序关闭时(不在后台)执行ajax调用?当app在后台时,我们可以使用background-fetch,但我从来没有遇到过在app关闭时做一些事情的问题。
发布于 2016-02-07 21:14:01
简短的回答是不,你的应用程序在被终止后不能运行代码。
您可以在AppDelegate的applicationWillTerminate中运行代码,但该方法主要用于保存用户数据和其他类似任务。
另请参阅this answer。
发布于 2016-02-08 20:40:30
是的,你可以在后台做一些事情。您只能使用几种不同的后台执行模式。服务器通信是允许的模式之一(后台获取)。确保在Xcode中按照指导原则正确设置了属性(即在进行数据传输时不要说自己是一个音频应用程序)。详情请看这里:
我找到了你的问题,因为它有关联的Cordova标签。如果你使用的是Cordova,你可以在这里使用这个插件来管理后台的东西:
https://github.com/katzer/cordova-plugin-background-mode
编辑:如果用户强制关闭/终止应用程序,那么您将无能为力。如果他们只是退出应用程序到主屏幕,并使用其他应用程序,那么您可以在后台运行。
您可以执行的另一个选项是计划本地通知以上载文件。如果你的app成功上传了文件,因为它是打开的/有连接的/在后台完成的,那么你就取消了本地通知。
如果本地通知没有被取消,它会提醒用户文件没有被上传,当他们打开通知时,你的应用程序将从它停止的地方开始。
发布于 2016-09-23 21:37:09
- (void)applicationWillTerminate:(UIApplication *)application {
if (application) {
__block UIBackgroundTaskIdentifier backgroundTask = UIBackgroundTaskInvalid;
backgroundTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
backgroundTask = UIBackgroundTaskInvalid;
}];
[self doSomething];
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
}
}https://stackoverflow.com/questions/35253840
复制相似问题