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