Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[译]关于 App 启动顺序 #58

Open
kingcos opened this issue Nov 16, 2018 · 0 comments
Open

[译]关于 App 启动顺序 #58

kingcos opened this issue Nov 16, 2018 · 0 comments
Assignees
Labels
[Translation] 即译文

Comments

@kingcos
Copy link
Owner

kingcos commented Nov 16, 2018

Translation - [译]关于 App 启动顺序

作者 原文链接
Apple Inc. About the App Launch Sequence

学习在启动时的代码执行顺序。

  • 框架
    • UIKit

概览

一个 App 的启动需要经过许多复杂的步骤,其中大部分由 UIKit 自动处理。在启动过程中,UIKit 会调用 App 代理中的方法,因此我们可以执行自定义的任务。图中的步骤展示了从 App 启动的时间开始直到被认为初始化完成的过程。

图例 1 App 启动和初始化序列

  1. 由用户显式或系统隐式启动 App。
  2. Xcode 提供的 main 函数调用 UIKit 的 UIApplicationMain(_:_:_:_:) 函数。
  3. UIApplicationMain(_:_:_:_:) 函数创建 UIApplication 对象和 App 代理。
  4. UIKit 从主 storyboard 或 nib 文件加载 App 的默认界面。
  5. UIKit 调用 App 代理的 application(_:willFinishLaunchingWithOptions:) 方法。
  6. UIKit 执行状态恢复(state restoration),即调用 App 代理和视图控制器中的额外的方法。
  7. UIKit 调用 App 代理的 application(_:didFinishLaunchingWithOptions:) 方法。

当初始化完成,系统将 App 转到激活(前台)状态或后台状态。当 App 转到激活状态,其窗口出现在屏幕上,并开始响应用户交互。当 App 转到后台状态,其窗口保持隐藏,并在被暂停前运行极短的时间。

不管 App 启动到前台还是后台,大部分启动时间初始化的代码应当是相同的。举个例子,我们应当依旧初始化 App 的数据结构,并设置 App 用户界面。但是,如果有只在前台或后台运行的自定义的任务,检查 UIApplication 对象的 applicationState 属性即可。当 App 运行到前台时,UIKit 设置该属性为 UIApplication.State.inactive,当 App 运行到后台时,UIKit 设置该属性为 UIApplication.State.background

参阅

启动时间


以下内容为译者添加:

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Translation] 即译文
Projects
None yet
Development

No branches or pull requests

1 participant