UIAPPLICATIONDELEGATE 代理函数调用的时间(应用程序生命周期)

来源:互联网 发布:网络利大于弊辩论词50 编辑:程序博客网 时间:2024/05/12 09:46

转自:http://blog.csdn.net/fg313071405/article/details/6977682


UIApplicationDelegate 包含下面几个函数监控应用程序状态的改变:

    • – application:didFinishLaunchingWithOptions:
    • – applicationDidBecomeActive:
    • – applicationWillResignActive:
    • – applicationDidEnterBackground:
    • – applicationWillEnterForeground:
    • – applicationWillTerminate:

当一个应用程序首先运行时,调用函数didFinishLaunchingWithOptions,但此时应用程序还处于inactive状态,所以接着会调用applicationDidBecomeActive函数,此时就进入了应用程序的界面了。
接着当按下home键时(此时主界面是应用程序主界面),会调用applicationWillResignActive函数,接着调用applicationDidEnterBackground函数,这时手机回到桌面。
当再按下应用程序图标时,(假设此时应用程序的内存还没有被其他的应用程序挤掉),调用applicationWillEnterForeground函数,接着调用applicationDidBecomeActive函数,此时又会到应用程序主界面。
在应用程序的主界面,我们双击home键,(出现多任务栏),调用applicationWillResignActive函数,点击上面部分又会回到程序中,调用applicationDidBecomeActive函数,如果点击多任务栏的其他应用程序,则会调用applicationDidEnterBackground函数之后,进入其他应用程序的界面。
而对于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.)
大家都知道应用程序的后台运行是有很多限制的,下次有时间讲探讨一下IOS的running in the background~~
0 0
原创粉丝点击