【iOS架构】iOS应用的生命周期
2016-07-15 15:59
399 查看
程序的5种状态
如图,iOS应用主要分为5种状态。1 [^2]
Not Running (非运行状态)。应用没有运行或被系统终止。 Inactive(前台非活动状态)。应用正在进入前台状态,但不能接受事件处理。app可能正在执行其他代码。 Active(前台活动状态)。应用进入前台状态,能接受事件处理。 Background(后台状态)。应用进入后台后,依然能够执行代码。如果有可执行的代码,就会执行代码,如果没有可执行的代码或者可执行的代码执行完毕,应用会马上进入挂起状态。 Suspended(挂起状态)。处于挂起的应用进入一种“冷冻”状态,不能执行代码。如果系统内存不够,应用会被终止。
关于AppDelegate中的各种委托方法和通知
UIApplicationDidFinishLaunchingNotification (通知名称) ---> application:didFinishLaunchingWithOptions:(委托方法):在应用程序启动后直接进行应用程序级编码的主要方式。 UIApplicationWillResignActiveNotification(通知名称)--->applicationWillResignActive:(委托方法):用户按下主屏幕按钮调用,不要在此方法中假设将进入后台状态,只是一种临时变化,最终将恢复到活动状态 UIApplicationDidBecomActiveNotification(通知名称) ---->applicationDidBecomeActive:(委托方法):应用程序按下主屏幕按钮后想要将应用程序切换到前台时调用,应用程序启动时也会调用,可以在其中添加一些应用程序初始化代码 > applicationWillResignActive:和applicationDidBecomeActive:这两个方法代表着应用程序从活动状态过度到不活动状态,是启用或禁用任何动画、应用程序的音频或其他处理应用程序表示(向用户)的项目的不错位置。 UIApplicationDidEnterBackgroundNotification(通知名称)----->applicationDidEnterBackground:(委托方法):应用程序在此方法中释放所有可在以后重新创建的资源,使计时器失效,保存所有用户数据,关闭网络连接等。如果需要,也可以在这里请求在后台运行更长时间。如果在这里花费了太长时间(超过5秒),系统将断定应用程序的行为异常并终止他。 UIApplicationWillEnterForegroundNotification(通知名称) ---->applicationWillEnterForeground:(委托方法):当应用程序在applicationDidEnterBackground:花费了太长时间,终止后,应该实现此方法来重新创建在applicationDidEnterBackground中销毁的内容,比如重新加载用户数据、重新建立网络连接等。 > 请注意,当巧用applicationDidEnterBackground:时,可以安全地假设最近也调用了applicationWillResignActive UIApplicationWllTerminateNotification(通知名称) ----> applicationWillTerminate:(委托方法):现在很少使用,只有在应用程序已进入后台,并且系统出于某种原因决定跳过暂停状态并终止应用程序时,才会真正调用它。
状态跃迁过程的调用方法
非运行状态–应用启动场景
场景描述:用户点击应用图标,可能是第一次启动,也可能是应用终止后重新启动。共经历两个阶段3个状态。Not running -> Inactive -> Active
Not running -> Inactive阶段。调用application:disFinishLaunchingWithOptions:方法,发出UIApplicationDidFinishLaunchingNotification通知。 Inactive -> Active阶段。调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。
双击Home键–应用处于前台非活动状态
场景描述:应用处于运行状态(即Active状态)时,双击Home键。Active -> Inactive
Active -> Inactive阶段。调用applicationWillResignActive:方法,发出UIApplicationWillResignActiveNotification通知。
双击Home键后再回到前台–应用处于前台由非活动状态变为活动状态
场景描述:应用处于运行状态(即Active状态)时,双击Home键。Inactive -> Active
Inactive -> Active阶段。调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。
点击Home键/锁屏–应用退出场景
场景描述:应用处于运行状态(即Active状态)时,点击Home键/锁屏或者有其他的应用导致当前应用终止。状态跃迁过程分两种情况:
可以在后台运行或者挂起; 不可以在后台运行或者挂起。
对于第一种情况:共经历3个阶段4个状态。
Active -> Inactive -> Background -> Suspended
Active -> Inactive阶段。调用applicationWillResignActive:方法,发出UIApplicationWillResignActiveNotification通知。Inactive -> Background阶段。应用从非活动状态进入到后台。
Background -> Suspended阶段。调用applicationDidEnterBackground:方法,发出UIApplicationDidEnterBackgroundNotification通知。
对于第二种情况:共经历4个阶段5个状态。
Active -> Inactive -> Background -> Suspended -> Not running
Active -> Inactive阶段。应用由活动状态转为非活动状态。 Inactive -> Background阶段。应用从非活动状态进入到后台。 Background -> Suspended阶段。调用applicationDidEnterBackground:方法,发出UIApplicationDidEnterBackgroundNotification通知。 Suspended -> Not running阶段。调用applicationWillTerminate:方法,发出UIApplicationWillTerminateNotification通知。
挂起重新运行场景–切换app到前台/解锁使app处于前台
场景描述:挂起状态的应用重新运行。共经历3个阶段4个状态。Suspended -> Background -> Inactive -> Active
Suspended -> Background阶段。应用从挂起状态进入后台。
Background -> Inactive阶段。调用applicationWillEnterForeground:方法,发出UIApplicationWillEnterForegroundNotification通知。
Inactive -> Active阶段。调用applicationDidBecomeActive:方法,发出UIApplicationDidBecomeActiveNotification通知。
内存清除–应用终止场景
场景描述:应用在后台处理完成时进入挂起状态(一种休眠状态)。如果这时发出低内存警告,为了满足其他应用对内存的需求,该应用就会被清除内存而终止运行。这时不会再调用applicationWillTerminate:方法,即也不会发出UIApplicationWillTerminateNotification通知。内存清除时应用终止运行。有两种情况:
系统强制清除内存 由使用者从任务栏中手动清除(即删除应用)
内存清除后如果应用再次运行,上一次的运行状态不会被保存,相当于应用第一次运行。这种场景下,应用不会调用任何方法,也不会发出任何通知。
iOS应用的生命周期 http://www.jianshu.com/p/d7cbc7db40c3
[^2]:App Programming Guide for iOS https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html ↩
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- 架构纵横谈之二 ---- 架构的模式与要点
- BS项目中的CSS架构_仅加载自己需要的CSS
- 关于三种主流WEB架构的思考
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Android操作系统的架构设计分析
- w3c技术架构介绍
- linux学习笔记 linux目录架构
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法