iOS 之App启动发生的那些事

(一)App的一些状态

一般App一种状态切换另一种状态来响应系统发生的事件有很多不同的状态:

  • Not running:App还没运行
  • Inactive:App运行在foreground但没有接收事件
  • Active:App运行在foreground和正在接收事件
  • Background:运行在background和正在执行代码
  • Suspended:运行在background但没有执行代码

(二)App 在启动和结束等发生状态变化的代理方法delegate 和通知

application:willFinishLaunchingWithOptions: - 这个方法是你在启动时的第一次机会来执行代码

  (1)  回调方法:application:didFinishLaunchingWithOptions:

  • 本地通知:UIApplicationDidFinishLaunchingNotification
  • 触发时机:程序启动并进行初始化的时候后。
  • 适宜操作:这个阶段应该进行根视图的创建。

(2)回调方法:applicationDidBecomeActive:

  • 本地通知:UIApplicationDidBecomeActiveNotification
  • 触发时机:程序进入前台并处于活动状态时调用。
  • 适宜操作:这个阶段应该恢复UI状态(例如游戏状态)。

(3)回调方法:applicationWillResignActive:

  • 本地通知:UIApplicationWillResignActiveNotification
  • 触发时机:从活动状态进入非活动状态。
  • 适宜操作:这个阶段应该保存UI状态(例如游戏状态)。

(4)回调方法:applicationDidEnterBackground:

  • 本地通知:UIApplicationDidEnterBackgroundNotification
  • 触发时机:程序进入后台时调用。
  • 适宜操作:这个阶段应该保存用户数据,释放一些资源(例如释放数据库资源)。

(5)回调方法:applicationWillEnterForeground:

  • 本地通知:UIApplicationWillEnterForegroundNotification
  • 触发时机:程序进入前台,但是还没有处于活动状态时调用。
  • 适宜操作:这个阶段应该恢复用户数据。

(6)回调方法:applicationWillTerminate:

  • 本地通知:UIApplicationWillTerminateNotification
  • 触发时机:程序被杀死时调用。
  • 适宜操作:这个阶段应该进行释放一些资源和保存用户数据。

(三)App的一些状态变换:

     当App启动时:

首先由not running--->inactive状态,此时调用application:willFinishLaunchingWithOptions(第一次启动时调用)、
application:didFinishLaunchingWithOptions:方法;

然后由inactive--->active状态,此时调用applicationDidBecomeActive:方法。

发送:UIApplicationDidBecomeActiveNotification

     当App发生中断时: 

由active--->inactive状态,此时调用applicationWillResignActive:方法。
 

      当你点击iPhone的一次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

      当你点击iPhone的两次Home时再打开APP:

Suspended-->Background-->Inactive-->Active

Background-->Inactive
调用 applicationWillEnterForeground: 发送:UIApplicationWillEnterForegroundNotification
Inactive-->Active
调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification

    当内存不足,杀死程序 

Background-->Suspended-->Not running
这种情况不会调用任何方法,也不会发送任何通知。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值