zoukankan      html  css  js  c++  java
  • iPhone深入浅出 iOS 之生命周期

    iOS应用程序的生命周期又根据系统是否支持多线程分为两种:
    不支持多线程的iOS4之前的系统以及支持多线程的iOS4及其之后的系统。
    iOS4 之前系统,app的生命周期如下所示:
    step 1,点击 app icon 或者从应用程序url(比如在Safari地址栏中输入应用程序url)启动应用程序。
    step 2,就会进入 UIApplicationDelegate 的
    - (void)applicationDidFinishLaunching:(UIApplication *)application;
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
    step 3, 如果是从 url 启动的则先进入 UIApplicationDelegate 的
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
    然后再跳转到step 4;否则直接跳转到step 4;
    step 4,进入 UIApplicationDelegate 的
    - (void)applicationDidBecomeActive:(UIApplication *)application;
    step 5,进入应用程序主循环,这时应用程序已经是活动的了,用户可以与应用程序交互。
    step 6,在 step 5 状态下,如果按住 home 键或者进行任务切换操作,然后跳转到 step8;
    step 7,在 step 5 状态下,应用程序被中断(如来电,来短信),进入 UIApplicationDelegate 的
    - (void)applicationWillResignActive:(UIApplication *)application;
    如果用户选择不处理继续留在当前应用程序,则回到 step 4;如果用户选择处理,则跳转到 step8;
    step 8,进入 UIApplicationDelegate 的
    - (void)applicationWillTerminate:(UIApplication *)application;
    当前应用程序关闭。
    注:这里所说的进入,并非真正的调用该消息,只是走流程。因为 UIApplicationDelegate的方法都是@optional的,实现了则真正执行,没有实现则什么也不做。

    iOS4 及其之后的系统,app的生命周期如下所示:
    从图中我们可以看出,支持多线程之后,情况要复杂得多了。但总体还是有规律可循的,多了一个后台模式。
    在app被中断之后,先进入后台:
    - (void)applicationDidEnterBackground:(UIApplication *)application;
    在app被中断后继续时,要从后台模式切换到前台:
    - (void)applicationWillEnterForeground:(UIApplication *)application;
    注意:iOS3.2 下构建的 app 也会进入applicationDidEnterBackground:,然后立马就关闭掉了。而iOS4.x下构建的app,进入applicationDidEnterBackground:后,不会立马关闭掉,而是留在后台状态。在后台状态下,无论你是通过点击 appicon还是任务切换回到前台,首先进入的是 applicationWillEnterForeground,然后才是applicationDidBecomeActive。
    当系统内存不足时,系统会强行关闭那些尚在内存中但处于后台状态的 app,以腾出足够的内存供使用。但是那些被强行关闭的程序不会调用任何UIApplicationDelegate的委托方法,只会得到一个KILL信号。当我们长按appicon,强行关闭app,也是同样的处理过程。
    在iOS4及之后的系统中,在app运行过程中接电话/查看短信,应用程序不会被关闭,它会进入后台模式。我们可以双击 home键查看所有当前运行着的应用程序。


  • 相关阅读:
    Linux Shell编程入门
    vim 文件在linux不换行,只显示^M解决办法
    服务器高性能程序 磁盘I/O篇
    车牌识别_转自别人的博客
    ubuntu网络简单设置
    C++设计模式(转载)
    结构算法之道
    C++设计模式工厂方法
    二叉树的深度优先遍历、广度优先遍历和非递归遍历
    iptables
  • 原文地址:https://www.cnblogs.com/zhiqiangsimida/p/2774605.html
Copyright © 2011-2022 走看看