当应用程序处于活动状态时,我已经测试了当iPhone 关闭时,我的应用程序正在受到什么影响。为此,我在xcode调试器控制台中记录了应用程序生命周期的回调方法。
结果是:当我按下设备的开/关按钮一段时间后applicationWillResignActive
被调用。 iPhone显示关闭屏幕上设备的选项。如果我知道要关闭,iPhone就会关闭。但显然没有其他回调方法,如applicationDidEnterBackground
或applicationWillTerminate
被称为。因此,如果我不将其保存在applicationWillResignActive
中,则所有数据都将丢失。虽然iOS Application Programming Guide表示,但应该在applicationDidEnterBackground
和applicationWillTerminate
中保存应用的数据。
你怎么看,这两种方法中的一种仍然被调用,只是不再在控制台中打印出来了?
祝你好运
答案 0 :(得分:3)
我做了一些进一步的测试:
我已将被调用的生命周期方法保存在数据库中,并在应用程序运行时关闭了iPhone。 实际上只调用applicationWillResignActive
。
但是在关闭之后,我的应用程序处于“未运行”状态,因为启动它会启动application:didFinsihLaunchingWithOptions:
和applicationDidBecomeActive
的调用。因此,如果我不将其保存在applicationWillResignActive
中,则应用程序数据会丢失。
如果电池为空,则应用程序正在运行 applicationDidEnterBackground
并且applicationWillTerminate
被调用(不会调用applicationWillResignActive
! )。
答案 1 :(得分:1)
我认为您的测试可能是正确的。该应用程序不再处于活动状态,但尚未进入后台 - 有点像我打电话时 - 所以我认为通知是有意义的。
你应该怎么做?我的建议一无所获。在我看来,这个事件很少发生,因此不值得担心。如果你想要使用腰带和大括号,那么在'applicationWillResignActive'中保存状态应该可以正常工作,只要没有太多存储空间。
答案 2 :(得分:0)
我测试了这个。这是调用方法的顺序。
如果您滑动,设备将按照以下顺序在您的应用中调用以下两种方法
applicationDidEnterBackground
applciationWillTerminate
设备将关闭。
我假设当电池耗尽时会发生同样的情况。
这是在运行iOS 5.0的3G上测试的
希望这有帮助。