UIApplicationDelegate 包含下面几个函数监控应用程序状态的改变:
当一个应用程序首先运行时,调用函数
didFinishLaunchingWithOp tions,但此时应用程序还处于inactive状态,所以接着会调用
applicationDidBecomeActi ve函数,此时就进入了应用程序的界面了。
接着当按下home键时(此时主界面是应用程序主界面),会调用
applicationWillResignAct ive函数,接着调用
applicationDidEnterBackg round函数,这时手机回到桌面。
当再按下应用程序图标时,(假设此时应用程序的内存还没有被其他的应用程序挤掉),调用
applicationWillEnterFore ground函数,接着调用
applicationDidBecomeActi ve函数,此时又会到应用程序主界面。
在应用程序的主界面,我们双击home键,(出现多任务栏),调用
applicationWillResignAct ive函数,点击上面部分又会回到程序中,调用
applicationDidBecomeActi ve函数,如果点击多任务栏的其他应用程序,则会调用
applicationDidEnterBackg round函数之后,进入其他应用程序的界面。
而对于
applicationWillTerminate 函数,这里要说明一下:对于我们一般的应用程序,当按下home按钮之后,应用程序会处于一个suspended状态,如果现在去运行其他的程序,当内存不足,或者在多任务栏点击“减号”会完全退出应用程序,但是不管是哪一种,都不会去调用
applicationWillTerminate 函数(针对IOS4以上),因此我们不能在此函数中保存数据。
那
applicationWillTerminate 函数在什么时间调用呢?我查了下资料,还在网上找了找,原来这与当应用程序按下home按钮之后,应用程序的状态有关,当状态为suspended时,是永远不会调用此函数的,而当状态为“后台运行”(running in the background)时,当内存不足或者点击“减号”时,才会调用此函数!官方的原话为:
(
Even if you develop your application using iPhone SDK 4 and later, you must still be prepared for your application to be terminated. If memory becomes constrained, the system might remove applications from memory in order to make more room. If your application is currently suspended, the system removes your application from memory without any notice. However, if your application is currently running in the background, the system does call the
applicationWillTerminate :
method of the application delegate. Your application cannot request additional background execution time from this method.)