iOS应用一共有5个状态:
- 未运行 not running
- 非活跃 inactive
- 活跃 active
- 后台 background
- 挂起 suspended
用图表示就是
生命周期图
程序在活跃的时候会运行代码以及处理UI事件,在后台只能运行有限的时间不能处理UI事件。
切换应用时的生命状态
切换应用
当程序启动时,会从not running 状态,切换为 inactive状态
程序启动
此时程序代理会收到
func application(UIApplicaiton,will/didFinishLaunchingWithOptions:[UIApplicationLauchOptionKey:Any]?=nil)
你也可以观察UIApplicationDidFinishLaunching
传递过来的字典(也在通知的userInfo中)会告诉你程序启动的原因
比如:
- 有人想要打开一个URL,比如打开PDF文件
- 从其他设备接力
- 通知唤醒
- 蓝牙设备连接
当程序从活跃转为非活跃时
活跃转为非活跃
程序代理会收到
func applicationWIllResignActive(UIAppllication)
你也可以观察UIApplicationWillResignActive
你可能在需要在这里"暂停"你的UI,比如当电脑打进来时,停止音乐的播放。
当程序从非活跃转为活跃时
非活跃转为活跃
程序代理会收到
func applicationDidBecomeActive(UIApplication)
你也可以观察UIApplicationDiDBecomeActive
如果你之前“暂停”了UI,可以在这里取消暂停
当程序从非活跃转入后台时
非活跃转入后台
应用代理会收到
func applicationDidEnterBackground(UIApplication)
你也可以观察UIApplicationDidEnterBackupround
在这里程序还可以运行30s,但是你可以请求更多的时间。
当程序从后台转入非活跃时
后台进入非活跃
恭喜你,你的程序没有在后台被杀死,而且很快会进入活跃状态,应用代理会收到
func applicationWillEnterForeground(UIApplication)
你也可以观察UIApplicationWillEnterForeground
UIApplication
单例
在你的应用中有一个单例对象 let myApp - UIApplication.shared
它管理着全局行为,它代理的所有都在UIApplicationDelegate中
除此之外,它还有很多有用的功能:
用其他程序打开URL
func open(URL)
func canOpenURL(URL)->Bool
注册和接收通知
func (un)registerForRemoteNotifications()
通知,包括本地和远程,都已经被UNNotification 框架处理了。
设置后台获取的时间间隔
如果你想要在后台继续工作,你必须设置此项
func setMinimumBackgroundFetchInterval(TimeInterval)
你通常需要把这设置给UIApplicationBackgroundFetchIntervalMinmum
在后台时征求更多的时间
func beginBackgroundTask(withExpirationHandler:(()->Void)?)->UIBackupgroundTaskIdentifier
执行完成时,不要忘记调用endBackgroundTask(UIBackupgroundTaskIdentifier)
打开状态栏的网络指示图标
var isNetworkActivityIndicatorVisibal:Bool注意这只是一个布尔值,要小心使用
其他
var backgroundTimeRemaining:TimeInterval{get}//还有多久程序被挂起
var perferedContentSizeCategory:UIContentSizeCategory{get}//大字体还是小字体
var applicationState:UIApplicationState{get}//前台,后台,活跃












网友评论