【问题标题】:Only applicationWillResignActive called when iPhone shuts down?iPhone关机时只调用applicationWillResignActive?
【发布时间】:2011-05-06 18:51:40
【问题描述】:

各位专家,

我测试了当 iPhone 关闭而应用程序处于活动状态时,我的应用程序会发生什么情况。为此,我在 xcode 调试器控制台中记录了应用程序生命周期的回调方法。

结果是:当我按下设备的开/关按钮一段时间后,applicationWillResignActive 被调用。 iPhone 会在屏幕上显示关闭设备的选项。如果我确认关机,iPhone 就会关机。但显然 没有进一步的回调方法,如 applicationDidEnterBackgroundapplicationWillTerminate 被调用。因此,如果我不将其保存在 applicationWillResignActive 中,所有数据都会丢失。尽管iOS Application Programming Guide 说,应该将应用程序的数据保存在applicationDidEnterBackgroundapplicationWillTerminate 中。

你怎么看,这两种方法之一是否仍然被调用,只是不再打印在控制台中?

最好的问候

【问题讨论】:

  • 有趣的观察。它似乎有可能被控制台调用,然后断开连接,但我敢打赌它甚至不会被调用。我的预感是 iOS 应用程序的处理方式与 OSX 的突然终止类似,因此该进程在没有通知的情况下被终止。但话又说回来,我敢打赌用户很少会关掉他们的设备(如果他们知道怎么做的话)。
  • 但如果电池没电,设备也会关闭。在电池没电的情况下,很难测试应用程序的行为。因为如果您将 iPhone 连接到开发 PC 以在控制台中记录回调方法,则需要付费!但我猜该应用的行为类似于手动关闭案例。
  • 我在运行 iOS 5.0 的 3GS 上进行了测试...如果确认关闭,将调用 applicationDidEnterBackground 和 applicationWillTerminate!设备在关机前登录到控制台。

标签: iphone ios4 multitasking


【解决方案1】:

我做了一些进一步的测试:

我已将调用的生命周期方法保存在数据库中,并在应用程序运行时关闭了 iPhone。 实际上只调用了applicationWillResignActive 但是在关闭后,我的应用程序处于“未运行”状态,因为启动它会启动application:didFinsihLaunchingWithOptions:applicationDidBecomeActive 的调用。所以如果我不保存在applicationWillResignActive中,应用程序数据就会丢失。

如果在应用程序运行时电池没电调用applicationDidEnterBackgroundapplicationWillTerminate(不调用applicationWillResignActive!)。

【讨论】:

    【解决方案2】:

    我认为您的测试可能是正确的。该应用程序不再处于活动状态,但它还没有进入后台 - 有点像我来电时 - 所以我认为通知是有意义的。

    你应该怎么做?我的建议什么都不是。在我看来,这件事发生得如此罕见,以至于不值得担心。如果您想使用皮带和大括号,那么只要没有太多要存储的东西,就可以在“applicationWillResignActive”中保存状态。

    【讨论】:

      【解决方案3】:

      我对此进行了测试。这是调用方法的顺序。

      1. applicationWillResignActive - 当用户长按设备上的锁定按钮时(并显示一个滑块,询问用户“滑动关机”

      如果你滑动,设备会按照下面的顺序在你的应用中调用以下两个方法

      1. applicationDidEnterBackground

      2. applciationWillTerminate

      设备将关闭。

      我假设当电池耗尽时也会发生同样的情况。

      这是在运行 iOS 5.0 的 3G 上测试的

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多