ios应用启动过程及生命周期分析

来源:互联网 发布:印度农民知乎 编辑:程序博客网 时间:2024/04/30 04:28

    跟所有基于C的程序一样,ios应用的入口为main函数,函数的代码通常如下:

    

int main(int argc, char *argv[]) {    @autoreleasepool {        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));    }}
    UIApplicationMain的函数原型为:

    

UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

    其中,argc(argument count的简称)指代参数的个数;argv(argument variable的简称)指代每个参数;principalClassName指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则从info.plist中读取键为NAPrincipalClass的值,如果info.plist中没有此键,则默认为UIApplication;delegateClassName即为代理类的名字,在新建工程时创建。


    在AppDelegate中,常用的几个代理方法如下:

    Launch time --

            application:willFinishLaunchingWithOptions:—在应用加载阶段第一次调用
            
application:didFinishLaunchingWithOptions:—加载结束阶段调用,执行完毕后应用即进入活动状态

    Transitioning to the foreground --
            
applicationDidBecomeActive:—首先在应用进入活动阶段后调用,应用即将进入前台运行

    Transitioning to the background --
            
applicationDidEnterBackground:—应用进入后台后调用,可在此加入后台运行的相关代码

    Transitioning to the inactive state --

            applicationWillResignActive:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,包括来电
            
applicationWillEnterForeground:当程序从后台将要重新回到前台时候调用

    Termination --
            
applicationWillTerminate:—应用要退出时调用,需要要设置UIApplicationExitsOnSuspend的键值

    应用的生命周期中,函数的执行顺序为:

    启动程序:

           application:willFinishLaunchingWithOptions:

           application:didFinishLaunchingWithOptions:

           applicationDidBecomeActive:

    按下HOME键:

           applicationWillResignActive:

           applicationDidEnterBackground:

    双击HOME键,点击程序进入前台:

           applicationWillEnterForeground:      

           applicationDidBecomeActive:     


    苹果官方文档中给出程序的状态有5个:

            Not running : 程序没有加载或者已经终止。

            Inactive : 应用运行在前台,但是不接受事件响应。应用通常仅在状态切换的时候会经过这个状态,此时应用程序保持静止。

            Active : 应用程序在前台运行并且接受响应事件。

            Background程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态。可通过注册特定服务长期处于Backgroud状态

            Suspended程序驻留在内存中,不能执行代码。系统会自动把驻留在后台并且没有任务执行的应用转为这个状态。当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

    状态变化图如下:



0 0
原创粉丝点击