ios - applicationWillEnterForeground 与 applicationDidBecomeActive、applicationWillResignActive 与 applicationDidEnterBackground

标签 ios objective-c iphone uiapplicationdelegate

当应用程序从后台唤醒并且您希望它准备好使其处于事件状态时,哪个是合适的委托(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 请求更多时间:

The official documentation.

关于ios - applicationWillEnterForeground 与 applicationDidBecomeActive、applicationWillResignActive 与 applicationDidEnterBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3712979/

相关文章:

ios - 是否可以创建自签名 ssl 证书来避免应用程序代码中的 "challenge"?

ios - 类型 'String' 不符合 'SequenceType' 的协议(protocol)

objective-c - 合成 'global' 对象时出现 EXC_BAD_ACCESS

ios - SpriteKit 中的 AdMob 插页式广告

ios - 几天后测试中的 iPhone 应用程序崩溃

ios - typedef struct 与 Object - 优点

iphone - 如何在表格单元格中使用 UIWebView?

iphone - 如何确定为 Web 服务 API 实现的 Http 方法类型

ios - 进程有超出允许时间的事件断言 iOS

ios - 如何从另一个 iPhone 应用程序启动 MobileIron Web@Work 应用程序?