当一个应用程序从后台被唤醒,你想让它准备为活动时,哪个是正确的委托来实现?
applicationwillenter前台vs applicationDidBecomeActive——有什么区别?
当应用程序将进入睡眠状态,你想让它准备清理和保存数据时,应该实现哪个委托呢?
applicationWillResignActive vs. applicationDidEnterBackground—有什么区别?
此外,我还注意到当传入短信或电话进来时,applicationWillResignActive被调用,但用户选择单击Ok并继续。我不希望我的应用程序在这些情况下采取任何行动。我只是想让它继续运行,没有任何中间清理,因为用户没有退出应用程序。所以,我认为它更有意义,只在applicationDidEnterBackground做清理工作。
我希望您能提供一些最佳实践,帮助我们选择使用哪些委托来唤醒和入睡,以及考虑像被短信/电话打断这样的事件。
谢谢
applicationwillenter前台被称为:
当应用程序重新启动(从后台到前台)
当应用程序第一次启动时,即当applicationDidFinishLaunch被调用时,该方法不会被调用,而只在来自后台时调用
applicationDidBecomeActive
applicationDidBecomeActive被调用
当应用程序在didFinishLaunching后第一次启动时
在applicationwillenter前台之后,如果没有URL要处理。
调用handleOpenURL。
在applicationWillResignActive后,如果用户忽略中断,如电话或短信。
在alertView从应用程序的任何地方消失后
我对达诺的回答还是有点困惑,所以我做了一个小测试,以获得某些场景下的事件流,供我参考,但它可能对你也有用。这是针对那些在info.plist中没有使用UIApplicationExitsOnSuspend的应用程序。这是在iOS 8模拟器上进行的,并与iOS 7设备进行了验证。请原谅Xamarin的事件处理程序名称。它们非常相似。
从非运行状态初始启动和所有后续启动:
FinishedLaunching
OnActivated
打断(电话,上滑下滑,下滑上滑)
Home键双击列出不活跃的应用程序,然后重新选择我们的应用程序:
OnResignActivation
OnActivated
Home键双击列出非活动应用程序,选择另一个应用程序,然后重新启动我们的应用程序:
单按Home键,然后重新启动:
锁定(开/关按钮),然后解锁:
OnResignActivation
DidEnterBackground
WillEnterForeground
OnActivated
双击Home键,并终止我们的应用程序:(随后重新启动是第一种情况)
OnResignActivation
DidEnterBackground
DidEnterBackground(仅限iOS 7 ?)
是的,DidEnterBackground在iOS7设备上被调用了两次。两次UIApplication的状态都是Background。但是,iOS 8模拟器没有。这需要在iOS 8设备上进行测试。我拿到答案后会更新的,或者其他人可以确认。