当您的应用程序启动(无论是在前台或后台),使用您的应用程序委托application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:方法来执行以下操作:

  • 检查启动选项字典的内容,了解有关启动应用程序的原因,并做出相应的响应。

  • 初始化您的应用程序的关键数据结构。

  • 准备您的应用程序的窗口和视图以供显示:

在启动时,系统会自动加载您的应用程序的main Storyboard加载初始视图控制器。

application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:方法应该始终尽可能轻量级,以减少您的应用程序的启动时间。应用程序预计将启动,初始化UIWindow,并在不到5秒钟内开始处理事件。如果应用程序没有及时完成其启动周期,则系统会将其杀死而无法响应。因此,任何可能会减慢启动速度的任务(例如访问网络)都应该安排在辅助线程上执行。

当您的应用程序启动时,它将从未运行状态转移到活动状态或后台状态,并在非活动状态中短暂转换。作为启动周期的一部分,系统为您的应用程序创建一个进程和主线程,并main在该主线程上调用您的应用程序的功能。mainXcode项目附带的默认函数会立即将控制权移交给UIKit框架,UIKit框架完成初始化应用程序并准备运行的大部分工

下图显示了将应用程序启动到前台时发生的事件序列,包括调用的应用程序委托方法。

当您的应用程序启动到后台时(通常是为了处理某种类型的后台事件),启动周期会稍微改变为下图所示的状态。主要区别在于,您的应用不是处于活动状态,而是进入后台状态以处理该事件,并可能在此之后的某个时刻暂停。在启动到后台时,系统仍会加载应用的用户界面文件,但不会显示应用的窗口。

要确定您的应用程序是启动到前台还是后台,请在您的或委托方法中检查applicationState共享UIApplication对象的属性。当应用程序启动到前台时,此属性包含该值。当应用程序启动到后台时,该属性将包含该值。您可以使用此差异来相应地调整委托方法的启动时间行为。

application:willFinishLaunchingWithOptions:

application:didFinishLaunchingWithOptions:

UIApplicationStateInactive

UIApplicationStateBackground

应对临时中断

当发生基于警报的中断(例如来电)时,应用程序暂时移至不活动状态,以便系统可以提示用户如何进行。该应用程序保持这种状态,直到用户解散警报。此时,应用程序将返回到活动状态或移动到后台状态。
显示了发生基于警报的中断时,通过您的应用程序发生的事件流。

当您的应用程序进入前台时该怎么做

回到前台,您的应用程序有机会重新启动它移到后台时停止的任务。移动到前台时出现的步骤如图4-4所示。该applicationWillEnterForeground:方法应该撤销在您的applicationDidEnterBackground:方法中完成的任何操作,并且该applicationDidBecomeActive:方法应该继续执行与启动时相同的激活任务。

以上查阅与苹果官方文档, 原文地址:

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforHandlingAppStateTransitions/StrategiesforHandlingAppStateTransitions.html#//apple_ref/doc/uid/TP40007072-CH8-SW2

iOS 应用程序启动时要做什么的更多相关文章

  1. iOS app 程序启动原理

    iOS app 程序启动原理 Info.plist: 常见设置     建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...

  2. VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)

    之前写的一个VC应用程序,是程序启动时就直接出现在任务栏, 窗体不出现,等用户点击任务栏图标再出现窗口.和一些防火墙什么的软件类似. 这种效果实现并不是很困难的,硬是找不到最好的.为什么呢? 首先,在 ...

  3. 如何在ASP.NET Core程序启动时运行异步任务(2)

    原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...

  4. 如何在ASP.NET Core程序启动时运行异步任务(1)

    原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...

  5. Code First 迁移----官方 应用程序启动时自动升级(MigrateDatabaseToLatestVersion 初始值设定项)

    Code First 迁移 如果使用的是 Code First 工作流,推荐使用 Code First 迁移改进应用程序的数据库架构. 迁移提供一组允许以下操作的工具: 创建可用于 EF 模型的初始数 ...

  6. Android应用程序启动时发生AndroidRuntime : ClassNotFoundException for Activity class的解决方法

    在android应用程序启动时抛出下面异常导致启动失败:07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread ...

  7. 如何在ASP.NET Core程序启动时运行异步任务(3)

    原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...

  8. SpringBoot程序启动时执行初始化代码

    因项目集成了Redis缓存部分数据,需要在程序启动时将数据加载到Redis中,即初始化数据到Redis. 在SpringBoot项目下,即在容器初始化完毕后执行我们自己的初始化代码. 第一步:创建实现 ...

  9. iOS APP程序启动原理

    UIApplication 程序启动原理 一个应用程序运行就必须要有一个进程,一个进程至少要有一个线程,我们把这个线程叫做主线程,主线程开启之后会开启一个主运行循环,如果不开启一个运行循环,程序开启了 ...

随机推荐

  1. jq初始,选择器,事件,内容操作,样式操作

    jq操作页面文档http://jquery.cuishifeng.cn/ jq初始 <!DOCTYPE html> <html> <head> <meta c ...

  2. 工作总结汇报公司介绍产品宣传品牌展示企业文化PPT模

    清晰明了:在工作总结会议上都是要严肃为主,搞的花里胡哨既不好看也让领导有不好的影响:微粒体:模板样式立体效果非常好,能够一把将观众眼球给吸引住:样式齐全:各种PPT样式都有,能够承载工作汇报各种内容: ...

  3. SpringCloud(五):断路器(Hystrix)和hystrixdashboard图实现链路追踪

    第一:关于服务调用和熔断安全: ribbon和Feign: 1. 相当于nigx+doubbe,微服务间的服务调用,API网关的请求转发等内容2. Feign整合了Ribbon和Hystrix  Hy ...

  4. ALV字段设置更改后,展示不同步的问题

    案例: 一个需要用户交互的ALV,比如某字段设置为输入长度20,不区分大小写.用户要求输入长度改为50,且要求区分大小写. 处理方式: 如果本来ALV字段设置时,采用的是ref_table和ref_f ...

  5. How to restore and recover a database from an RMAN backup. (Doc ID 881395.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 10.1.0.2 to 11.2.0.2 [Release 10.1 to 11. ...

  6. linux 下使用 tc 模拟网络延迟和丢包-使用 linux 模拟广域网延迟 - Emulating wide area network delays with Linux

    tc 是linux 内置的命令:使用man pages 查看 我们看到,其功能为 show / manipulate traffic control settings,可对操作系统进行流量控制: ne ...

  7. JAVA 高级特性枚举和泛型

    枚举: 语法:  public enum 枚举名 { 枚举值表(罗列所有值) }  例如:  public enum EnumTest{MON,TUE,WED.THU,FRI,SAT,SUN} 枚举操 ...

  8. 前端JSON请求转换Date问题

    目的:记录使用SpringMVC中前端JSON数据中的日期转换成Date数据类型时区产生的问题 记录下遇到过的问题 在使用SpringMVC框架中,使用@RequestBody注解将前端的json数据 ...

  9. 201871010110 - 李华 《面向对象程序设计(java)》第一周学习总结

    项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://i.cnblogs.com/Ed ...

  10. 构建LVS负载均衡集群——NAT模式(最简单方式)

    一.装备一台lvs调度器主机要求两个网卡一个为内部局域网ip,一个为公网ip #IP地址设置过程不再重复 [root@localhost ~]# ip a | grep eth0 #内网ip : et ...