-
Not Running:未运行。
-
Inactive:前台非活动状态。处于前台,但是不能接受事件处理。
-
Active:前台活动状态。处于前台,能接受事件处理。
-
Background:后台状态。进入后台,如果又可执行代码,会执行代码,代码执行完毕,程序进行挂起。
-
Suspended:挂起状态。进入后台,不能执行代码,如果内存不足,程序会被杀死。
AppDelegate中的回调方法和通知
- 回调方法:application:didFinishLaunchingWithOptions:
本地通知:UIApplicationDidFinishLaunchingNotification
触发时机:程序启动并进行初始化的时候后。
适宜操作:这个阶段应该进行根视图的创建。
- 回调方法:applicationDidBecomeActive:
本地通知:UIApplicationDidBecomeActiveNotification
触发时机:程序进入前台并处于活动状态时调用。
适宜操作:这个阶段应该恢复UI状态(例如游戏状态)。
- 回调方法:applicationWillResignActive:
本地通知:UIApplicationWillResignActiveNotification
触发时机:从活动状态进入非活动状态。
适宜操作:这个阶段应该保存UI状态(例如游戏状态)。
- 回调方法:applicationDidEnterBackground:
本地通知:UIApplicationDidEnterBackgroundNotification
触发时机:程序进入后台时调用。
适宜操作:这个阶段应该保存用户数据,释放一些资源(例如释放数据库资源)。
- 回调方法:applicationWillEnterForeground:
本地通知:UIApplicationWillEnterForegroundNotification
触发时机:程序进入前台,但是还没有处于活动状态时调用。
适宜操作:这个阶段应该恢复用户数据。
- 回调方法:applicationWillTerminate:
本地通知:UIApplicationWillTerminateNotification
触发时机:程序被杀死时调用。
适宜操作:这个阶段应该进行释放一些资源和保存用户数据。
程序周期相关操作
- 程序启动
点击应用图标时,会经历三个状态:
Not running–>Inactive–>Active
Not running --> Inactive
调用 application:didFinishLaunchingWithOptions: 发送 UIApplicationDidFinishLaunchingNotification
Inactive–>Active
调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification
- 程序点击Home(双击home后台运行)
根据info.plist中Application does not run in background / UIApplicationExitsOnSuspend控制似乎否可以在后台运行或挂起。
如果可以在后台运行或者挂起会经历
Active–>Inactive–>Background–>Suspended
Active–>Inactive
调用 applicationWillResignActive: 发送:UIApplicationWillResignActiveNotification
Background–>Suspended
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification
如果不可以后台运行或挂起会经历
Active–>Inactive–>Background–>Suspended–>Not Running
Background–>Suspended
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification
Suspended–>Not Running
调用 applicationWillTerminate: 发送:UIApplicationWillTerminateNotification
- 挂起后,重新运行
Suspended–>Background–>Inactive–>Active
Background–>Inactive
调用 applicationWillEnterForeground: 发送:UIApplicationWillEnterForegroundNotification
Inactive–>Active
调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification
- 内存不足,杀死程序
Background–>Suspended–>Not running
这种情况不会调用任何方法,也不会发送任何通知。
==================================================================================
下面是UIViewController生命的相关方法(注意顺序)
//类的初始化方法,并不是每次创建对象都调用,只有这个类第一次创建对象才会调用,做一些类的准备工
作,再次创建这个类的对象。initialize方法将不会被调用,对于这个类的子类,如果实现了initialize
方法,在这个子类第一次创建对象是会调用自己的initialization方法,没有实现者由调用父类实现方
法;可以用以实现相关全局变量
- (void)initialize;
//对象初始化方法init方法和initCoder方法相似,只是被调用的环境不一样,如果用代码进行初始化,会
调用init,从nib文件或者归档进行初始化,会调用initCoder。
- (instancetype)init;
//从归档初始化
- (instancetype)initWithCoder:(NSCoder *)coder;
//加载视图:是开始加载视图的起始方法,除非手动调用,否则在viewcontroller的生命周期中没特殊情况
只被调用一次;ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的
getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来
创建view。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时
view以及创建好了。
-(void)loadView;
//将要加载视图:,类中成员对象和变量的初始化我们都会放在这个方法中,在类创建后,无论视图的展现或消失,这个方法也是只会在将要布局时调用一次。
- (void)viewDidLoad;
//将要展示
-(void)viewWillAppear:(BOOL)animated;
//将要布局子视图,在viewWillAppear后调用,将要对子视图进行布局。
-(void)viewWillLayoutSubviews;
//已经布局子视图
-(void)viewDidLayoutSubviews;
//已经展示
-(void)viewDidAppear:(BOOL)animated;
//将要消失
-(void)viewWillDisappear:(BOOL)animated;
//已经消失
-(void)viewDidDisappear:(BOOL)animated;
//内存警告
- (void)didReceiveMemoryWarning;
//被释放
-(void)dealloc;
从nib文件加载的controller,只要不释放,在每次viewWillAppare时都会调用layoutSubviews方
法,有时甚至会在viewDidAppare后在调用一次layoutSubviews,而重点是从代码加载的则只会在开始调
用一次,之后都不会,所以注意,在layoutSubviews中写相关的布局代码十分危险。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/15a2fec91b42a77859022075b05d1a6f.jpeg)
最后我还整理了很多Android中高级的PDF技术文档。以及一些大厂面试真题解析文档。
Android高级架构师之路很漫长,一起共勉吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/15a2fec91b42a77859022075b05d1a6f.jpeg)
最后我还整理了很多Android中高级的PDF技术文档。以及一些大厂面试真题解析文档。
[外链图片转存中…(img-5ZwceLs9-1712790563985)]
Android高级架构师之路很漫长,一起共勉吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!