iOS 前后台切换的接口函数

简介: iOS 前后台切换的接口函数

进入后台:applicationDidEnterBackground

转入前台:applicationWillEnterForeground


详细内容如下。


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


//开发app,我们要遵循apple公司的一些指导原则,原则如下:

1、应用程序的状态

状态如下:

Not running 未运行 程序没启动

Inactive 未激活 程序在前台运行,但不能接受事件的处理.当应用要从一个状态切换到另一个不同状态时,中途 过度会短暂停留在此状态.

Active 激活 程序在前台运行而且接收到了事件。这是应用在前台运行时所处的正常状态.

Backgroud 后台 程序在后台而且还在执行代码.大多数将要进入 Suspended 状态的应用,会先短暂进入此状态.如果应用请求更多额外的执行时间,该应用会在此状态保持更长一段时间.另外,如果一个应用要求启动时直接进入后台运行,这样的应用会直接从 NotRunning 状态进入 Background 状态,中途不会经过 Inactive 状态.比如,没有界面的应用(当然并不特指没有界面的应用),总之,如果应用直接进入 Background 状态,该应用界面不会被显示出来.

Suspended 挂起 应用处在后台,并且没有执行任何代码.系统会自动将应用转入该状态,并且不会发出任何通知.当处在该状态时,应用依然驻留内存,但不执行任何程序代码.当系统发生低内存警告时,系统会将出于 Suspended 状态的应用彻底移出内存,从而为前台应用释放更多的内存.


下图是程序状态变化图:  

111.png

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions // 告诉代理进程启动但还没进入状态保存. 应用程序将要启动时自动调用该方法,该方法是应用程序启动时第一次执行自定义代码的机会.



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions // 告诉代理启动基本完成程序准备开始运行. 应用程序启动时自动调用该方法,开发者可以在该方法中执行初始化相关的代码.



- (void)applicationDidBecomeActive:(UIApplication *)application //应用程序入活动状态执行. 应用在转入前台,并进入活动状态时回调该方法(当应用从启动到进入前台,或从后台转入前台都会调用该方法),可重写该方法执行最后的准备工作.



- (void)applicationWillResignActive:(UIApplication *)application // 当应用程序将要入非活动状态执行(应用正要从前台运行状态离开时将会调用该方法),在此期间,应用程序不接收消息或事件,比如来电话了



- (void)applicationDidEnterBackground:(UIApplication *)application // 用程序正出于 Background 状态,且随时可能进入Suspended 状态时将会调用该方法. 所以要设置后台继续运行,则在这个函数里面设置即可



- (void)applicationWillEnterForeground:(UIApplication *)application//当程序从后台将要重新回到前台,但暂时还没有到达 Active 状态时将会调用该方法. 这个刚好跟上面的那个方法相反。



- (void)applicationWillTerminate:(UIApplication *)application//该应用程序即将被终止时调用该方法,如果应用当前处在 Suspended 状态,此方法将不会被调用..通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。



- (void)applicationDidFinishLaunching:(UIApplication*)application当程序载入后执行




在上面8个方法对应的方法中键入NSLog打印。

现在启动程序看看执行的顺序:

启动程序

lifeCycle[40428:11303] willFinishLaunchingWithOptions

lifeCycle[40428:11303] didFinishLaunchingWithOptions

lifeCycle[40428:11303] applicationDidBecomeActive

按下home键

lifeCycle[40428:11303] applicationWillResignActive

lifeCycle[40428:11303] applicationDidEnterBackground

双击home键,再打开程序

lifeCycle[40428:11303] applicationWillEnterForeground

lifeCycle[40428:11303] applicationDidBecomeActive  

目录
相关文章
|
6月前
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
210 0
|
4月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
73 7
|
6月前
|
Android开发 iOS开发
ios后台播放声音的三种实现方式
ios后台播放声音的三种实现方式
522 1
|
6月前
|
iOS开发
iOS中如何显示后台返回的带有html标签的富文本字符串
iOS中如何显示后台返回的带有html标签的富文本字符串
62 0
|
6月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
61 0
|
6月前
|
移动开发 Android开发 iOS开发
ios标准页面调用HTML5页面和HTML5调用ios的函数
ios标准页面调用HTML5页面和HTML5调用ios的函数
49 0
|
6月前
|
iOS开发
Airtest的iOS实用接口介绍
Airtest的iOS实用接口介绍
|
6月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
994 1