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}//前台,后台,活跃
网友评论