iOS应用程序生命周期

2019-05-10  本文已影响0人  _我和你一样

iOS应用一共有5个状态:

用图表示就是

生命周期图

程序在活跃的时候会运行代码以及处理UI事件,在后台只能运行有限的时间不能处理UI事件。

切换应用时的生命状态

切换应用

当程序启动时,会从not running 状态,切换为 inactive状态

程序启动

此时程序代理会收到

func application(UIApplicaiton,will/didFinishLaunchingWithOptions:[UIApplicationLauchOptionKey:Any]?=nil)

你也可以观察UIApplicationDidFinishLaunching

传递过来的字典(也在通知的userInfo中)会告诉你程序启动的原因

比如:

当程序从活跃转为非活跃时

活跃转为非活跃

程序代理会收到

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}//前台,后台,活跃
上一篇 下一篇

猜你喜欢

热点阅读