我正在开发一款目前面向iOS平台的Cordova移动应用。我想知道当用户按下主页按钮突然在中间退出应用程序时如何处理错误。然后,用户点击了一个导航文件系统,读取文件,加密内容并保存到其他位置的按钮。在该过程的中间,用户单击了“主页”按钮,因此应用程序已移至后台。即使应用程序已移至后台或我是否需要处理这些案例,我是否可以预期所有操作都将完成?
答案 0 :(得分:2)
我想说你需要知道两件事:
1)除非您明确告知iOS,否则iOS不会执行后台操作,因此在您描述的情况下,iOS只会取消您应用中当前处于活动状态的操作。但是,您有机会在用户按下主页按钮的时间点与应用程序实际将其状态从活动状态更改为未激活状态的时间点之间执行某些操作。这可以在AppDelegate
中完成,因为这是控制应用的生命周期的组件。您在此处使用的方法是- (void)applicationWillResignActive:(UIApplication *)application
,在应用进入后台之前调用此方法,来自Apple docs:
调用此方法可让您的应用知道它即将移动 从活动状态到非活动状态。这可能发生在某些类型的 暂时中断(例如来电或短信) 消息)或当用户退出应用程序并开始转换时 到了背景状态。处于非活动状态的应用程序继续运行 但不会将传入的事件发送给响应者。
因此,这将是取消当前操作或保存当前状态以便以后恢复的地方。
2)iOS允许多任务,但它非常棘手,仅在某些情况下允许。这意味着当您的应用在后台时,您无法执行随机操作。 其中一些案例是:
核心位置更新:如果您在应用中使用核心位置,您的应用可以在设备的GPS位置发生变化时接收更新,并有机会在后台执行某些操作关于新的GPS数据
Voice over IP:该应用提供IP语音服务。具有此密钥的应用程序会在系统启动后自动启动,以便应用程序可以重新建立VoIP服务。使用此密钥的应用也可以播放背景音频。 (from the Apple Programming Guide on Background Execution)
后台提取:通过后台提取,您可以定期执行网络请求,但是您仍然无法在可以精确指定的时间点执行操作,您可以告诉您希望定期执行网络请求的iOS,iOS将为您安排请求。 Here is an excellent read on background fetches
希望它有所帮助!