当应用程序从后台唤醒并且您希望它准备好使其处于事件状态时,哪个是合适的委托(delegate)实现?
applicationWillEnterForeground vs applicationDidBecomeActive -- 有什么区别?
当应用程序进入休眠状态并且您希望它准备好清理和保存数据时,哪个是合适的委托(delegate)?
applicationWillResignActive 与 applicationDidEnterBackground 有什么区别?
另外,我注意到 applicationWillResignActive 会在收到短信或来电时被调用,但用户选择单击“确定”并继续。我不希望我的应用在这些情况下采取任何行动。我只是希望它在没有任何中间清理的情况下继续运行,因为用户没有退出应用程序。所以,我认为只在 applicationDidEnterBackground 中进行清理工作更有意义。
我希望您能就最佳实践提供意见,以选择实现哪些代表以实现唤醒和 sleep ,以及考虑诸如被短信/电话打断等事件。
谢谢
最佳答案
唤醒时,即重新启动应用程序(通过跳板、应用程序切换或 URL)applicationWillEnterForeground:
被调用。它只在应用程序可以使用时执行一次,在进入后台后,而 applicationDidBecomeActive:
在启动后可能会被多次调用。这使得 applicationWillEnterForeground:
非常适合需要在重新启动后进行一次的设置。
applicationWillEnterForeground:
被调用:
- 当应用重新启动时
- 在
applicationDidBecomeActive:
之前
applicationDidBecomeActive:
被调用:
- 在
application:didFinishLaunchingWithOptions:
之后首次启动应用时
- 在
applicationWillEnterForeground:
之后,如果没有要处理的 URL。 - 在调用
application:handleOpenURL:
之后。 - 在
applicationWillResignActive:
之后,如果用户忽略了电话或短信等中断。
applicationWillResignActive:
被调用:
- 当有电话等中断时。
- 如果用户接听电话
applicationDidEnterBackground:
会被调用。 - 如果用户忽略调用
applicationDidBecomeActive:
将被调用。
- 如果用户接听电话
- 当按下主页按钮或用户切换应用时。
- 文档说你应该
- 暂停正在进行的任务
- 禁用计时器
- 暂停游戏
- 降低 OpenGL 帧速率
applicationDidEnterBackground:
被调用:
applicationWillResignActive:
之后
- 文档说你应该:
- 释放共享资源
- 保存用户数据
- 使定时器失效
- 保存应用状态,以便在应用终止时恢复它。
- 禁用 UI 更新
- 你有 5 秒的时间来做你需要做的事情并返回方法
- 如果您在约 5 秒内未返回,则应用将被终止。
- 您可以通过
beginBackgroundTaskWithExpirationHandler 请求更多时间:
关于ios - applicationWillEnterForeground 与 applicationDidBecomeActive、applicationWillResignActive 与 applicationDidEnterBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3712979/