`

详解iOS App生命周期

 
阅读更多

所谓生命周期,其实就是指从App启动到关闭这一过程中所发生的一系列事件。由于iOS 4中引入了多任务功能,App能够在后台执行,而iOS 3 是没有多任务功能的,故两者的生命周期并不相同。请听我慢慢道来。

用户点击主界面上相应App的图标来启动App。点击之后,依次发生了两个动作:

  • 显示启动画面
  • 调用main方法启动App

然后,主要的初始化工作将交给UIKit来完成。它将加载主nib文件显示用户界面,并准备响应用户操作事件。

下图是iOS4 App生命周期的示意图。

Application Life Cycle

iOS 3上,当退出App时,App将被终止,并从内存中移除。App通常只有两种状态:

  • Active
  • Not running

而在iOS 4上,退出App时,App并没有被终止,仍然保留在内存中,只是被放到后台而已。此时,App的状态就变得复杂起来了,一共有5种:

  • Not running:App没有启动。
  • Inactive:App在前台运行,但当前不接收操作事件(虽然它可能在执行某些代码)。这种状态通常只用于在不同状态切换时的过渡,一般停留时间较短,例外的情况是,在锁屏状态或系统提示用户响应某些事件(如接听电话或收到短信),可以长时间停留在该状态。
  • Active:App在前台运行,并且接收操作事件。
  • Background:App在后台运行,并且正在执行代码。大多数App在进入Suspended状态之前会进入该状态。停留在该状态的时间长短将视执行代码的时间而定。
  • Suspended:App在后台运行,但没有执行代码。在低内存情况下,系统将在不发出任何通知的情况下终止该App,以为前台App腾出更多的内存。

那么,App是如何在这些状态间切换的呢?

用户启动一个已经保留在后台的应用时,系统先将App转换到Inactive转态,然后再转换到Active状态。这个过程将调用application delegate中的两个方法:

  • applicationWillEnterForeground
  • applicationDidBecomeActive

后台执行是iOS 4新增加的功能,在某些情况下,你可能想禁用该功能,虽然一般不鼓励这么做。操作方法是在Info.plist文件里面添加UIApplicationExitsOnSuspend属性,并将其值设置为YES。此时,App就只剩下Not running、Inactive、active三种状态,永远不会进入Background和Suspended状态。

当有来电、收到短信、日程提醒时,处理Active状态的应用将会临时进入Inactive状态。当用户决定接受或忽略来电、信息和日程时,App的状态将发生改变。

  • 如果用户忽略来电、短信和日程,将重新进入Active状态
  • 如果用户接收来电、短信和日程,将转入Suspended状态

相应地,也将触发application delegate的三个方法:

  • applicationWillResumeActive
  • applicationDidBecomeActive
  • applicationDidEnterBackground

分享到:
评论

相关推荐

    详解iOS App开发中session和coockie的用户数据存储处理

    当你发起网络请求时,NSURLSession会自动处理发送和接收cookie,你可以在NSHTTPCookieStorage的代理方法中监听和管理cookie的生命周期。 总结来说,iOS App开发中的数据存储处理涉及使用NSURLSession进行网络请求,...

    ios开发详解markdown格式

    - **CoreData**:这是一个用于iOS和macOS的数据持久化框架,可以有效地管理对象的生命周期及其之间的关系。 - **CoreAnimation**:提供了一套强大的动画接口,让开发者可以轻松实现复杂的动画效果。 - **Grand ...

    详解iOS App开发中UIViewController的loadView方法使用

    正确理解和使用这个方法可以帮助开发者更好地控制视图的生命周期,提高应用的性能和用户体验。在实际项目中,根据需求适当地重写`loadView`,可以实现自定义视图的加载逻辑,满足复杂界面的构建需求。

    iReSign.app,ios签名工具下载

    **iOS签名工具——iReSign.app详解** ...通过理解iOS签名的基本原理和iReSign.app的使用方法,开发者可以更有效地管理自己的应用生命周期,并确保应用的安全性。然而,务必注意合法使用,避免触犯Apple的开发者政策。

    iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在后台时,程序会受到系统...

    微信小程序 生命周期详解

    微信并未提供专门的销毁监听方法,可能是由于iOS系统的限制,App进入后台会被挂起,微信也无法确保何时会销毁小程序。 **页面生命周期** 页面生命周期专注于单个页面从加载到卸载的全过程,主要涉及以下事件: 1....

    iOS开发进阶-完整版

    - UIViewController:视图控制器的生命周期管理、导航与传递数据。 - UITableView:表格视图的创建与数据绑定。 #### 二、核心功能实现与优化技巧 - **网络通信**: - 使用URLSession发起HTTP请求。 - JSON...

    详解iOS开发中app的归档以及偏好设置的存储方式

    在iOS开发中,数据存储是应用程序生命周期管理的重要组成部分。本文主要探讨了两种常见的数据存储方式:归档(Archiving)和偏好设置(Preferences),并提供了详细的代码示例来阐述这两种方法。 首先,让我们理解一下...

    ios 使用xcode11 新建项目工程的步骤详解

    故此可以理解为:ios 13以后,Appdelegate负责处理App生命周期,scenedelegate负责处理UI生命周期的处理。 1.使用scenedelegate(iOS 13以下黑屏) 如果创建app支持的最低版本是ios13,可以考虑直接使用。 举例使用...

    Mac OS X and iOS Internals--非扫描版.7z

    9. **App Store和iOS应用生命周期**:详解App的提交流程,签名验证,以及App在iOS设备上的运行方式。 10. **硬件与驱动程序**:苹果设备的硬件架构,如处理器、GPU、传感器等,以及如何编写和集成驱动程序。 11. *...

    swift-一个iOS基于消息的MVC框架

    在iOS应用开发中,尤其是在使用Swift编程语言时,MBMvc框架提供了一种优雅的方式来解耦Model、View和Controller,避免了它们之间的直接引用,从而更好地管理组件的生命周期,减少潜在的内存泄漏和依赖关系混乱。...

    uin-app仿瑞幸咖啡app5个初始页面

    - **App.vue**:这是应用程序的根组件,包含了整个应用的顶级Vue组件结构,可以设置全局的生命周期钩子和样式。 - **components**:这个目录通常存放自定义的可复用组件。 - **static**:静态资源目录,用于存放...

    iOS中的应用启动原理以及嵌套模型开发示例详解

    4. **AppDelegate 生命周期方法**:随着`UIApplicationMain`的执行,`AppDelegate`的`application:didFinishLaunchingWithOptions:`方法会被调用,这是应用启动后的第一个入口点,开发者在这里初始化UI、设置数据源...

    IOS面试题总结,集合了很多培训机构的老师精心整理出来的,绝对给力

    10. **App生命周期与安全** - AppDelegate中的各个生命周期方法。 - App的安全策略,如HTTPS加密通信和用户隐私保护。 11. **测试与调试** - Unit Test和Integration Test的编写与执行。 - Xcode的Debug工具,...

    豆瓣相册ios应用

    **豆瓣相册iOS应用详解** 豆瓣相册是一款针对iOS平台的应用程序,其主要功能是解析豆瓣API,为用户提供豆瓣相册的浏览与...通过这样的应用,开发者不仅可以提升自己的技术能力,还能深入了解iOS应用的全生命周期管理。

    详解iOS自定义UITabBar与布局

    总的来说,自定义`UITabBar`和布局需要开发者对iOS UI组件有深入的理解,包括它们的行为、生命周期和布局规则。通过掌握这些知识,我们可以创建出符合项目需求的定制化导航体验,提升用户体验。在实际项目中,务必...

    uni-app demo

    uni-app遵循Vue.js的生命周期,如beforeCreate、created、mounted等,同时添加了一些特定于小程序的生命周期钩子,如onLoad、onShow、onHide等,便于处理小程序特有的页面状态管理。 4. **uni-app的API与插件** ...

Global site tag (gtag.js) - Google Analytics