iPhone关闭时只调用applicationWillResignActive?

时间:2010-11-08 17:10:48

标签: iphone ios4 multitasking

你好专家,

当应用程序处于活动状态时,我已经测试了当iPhone 关闭时,我的应用程序正在受到什么影响。为此,我在xcode调试器控制台中记录了应用程序生命周期的回调方法。

结果是:当我按下设备的开/关按钮一段时间后applicationWillResignActive被调用。 iPhone显示关闭屏幕上设备的选项。如果我知道要关闭,iPhone就会关闭。但显然没有其他回调方法,如applicationDidEnterBackgroundapplicationWillTerminate被称为。因此,如果我不将其保存在applicationWillResignActive中,则所有数据都将丢失。虽然iOS Application Programming Guide表示,但应该在applicationDidEnterBackgroundapplicationWillTerminate中保存应用的数据。

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

祝你好运

3 个答案:

答案 0 :(得分:3)

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

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

如果电池为空,则应用程序正在运行 applicationDidEnterBackground并且applicationWillTerminate被调用(不会调用applicationWillResignActive! )。

答案 1 :(得分:1)

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

你应该怎么做?我的建议一无所获。在我看来,这个事件很少发生,因此不值得担心。如果你想要使用腰带和大括号,那么在'applicationWillResignActive'中保存状态应该可以正常工作,只要没有太多存储空间。

答案 2 :(得分:0)

我测试了这个。这是调用方法的顺序。

  1. applicationWillResignActive - 当用户长按住设备上的锁定按钮时(并显示一个滑块询问用户“滑动关闭电源”
  2. 如果您滑动,设备将按照以下顺序在您的应用中调用以下两种方法

    1. applicationDidEnterBackground

    2. applciationWillTerminate

    3. 设备将关闭。

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

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

      希望这有帮助。