`
hongtoushizi
  • 浏览: 376498 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

深度解析iOS应用程序的生命周期(二)

    博客分类:
  • ios
阅读更多

转载自: http://www.csdn.net/article/2015-06-23/2825023/2

应用程序的状态和多任务

有时系统会从App一种状态切换另一种状态来响应系统发生的事件。例如,当用户按下Home键、电话打入或其他中断发生时,当前运行的应用程序会切换状态来响应。应用程序的状态有以下几种:

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

大多数发生状态转换时都会调用delegate对象对应的方法来响应App的状态改变。下面汇总了delegate对象的所有方法,当App状态发生转换时,你可能会使用到它们。

  • application:willFinishLaunchingWithOptions: - 这个方法是你在启动时的第一次机会来执行代码
  • application:didFinishLaunchingWithOptions: - 这个方法允许你在显示app给用户之前执行最后的初始化操作
  • applicationDidBecomeActive: - app已经切换到active状态后需要执行的操作
  • applicationWillResignActive: - app将要从前台切换到后台时需要执行的操作
  • applicationDidEnterBackground: - app已经进入后台后需要执行的操作
  • applicationWillEnterForeground: - app将要从后台切换到前台需要执行的操作,但app还不是active状态
  • applicationWillTerminate: - app将要结束时需要执行的操作

现在讲下App启动、来回切换App和锁屏时状态的切换和调用对应哪些delegate对象的方法:

  • App启动和active/inactive

如 图所示,当App启动时,首先由not running状态切换到inactive状态,此时调用application:didFinishLaunchingWithOptions:方法; 然后由inactive状态切换到active状态,此时调用applicationDidBecomeActive:方法。

当App发生中断时,由active状态切换到inactive状态,此时调用applicationWillResignActive:方法。

  • 来回切换App

如 图所示,当切换到另一个App时,由状态active切换到inactive,此时调用applicationWillResignActive:方法; 然后从inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。

而 当切换回本来的App时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground:方 法,然后由inactive状态切换到active状态,调用applicationDidBecomeActive:方法。

  • 锁屏

如 何所示,当手机锁屏时,由状态active切换到inactive,此时调用applicationWillResignActive:;然后再由 inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。

更多关于app状态切换以及调用app delegate哪些方法,请观看WWDC 2011 Session的session_320__adopting_multitasking_in_your_app视频。

应用程序的终止

系 统常常是为其他app启动时由于内存不足而回收内存最后需要终止应用程序,但有时也会是由于app很长时间才响应而终止。如果app当时运行在后台并且没 有暂停,系统会在应用程序终止之前调用applicationWillTerminate:来保存用户的一些重要数据以便下次启动时恢复到app原来的状 态。

总结

本文总结了iOS应用程序从启动 到结束过程中有哪些关键对象在参与,以及当用户与系统交互时产生事件时,系统利用main run loop来管理事件循环,决定将事件交给系统哪些对象处理和如何处理。而当App启动、来回切换App和锁屏时,App的状态如何切换和调用对应的哪些 app delegate对象来处理。

扩展阅读

 
分享到:
评论

相关推荐

    深度解析iOS应用程序的生命周期

    iOS应用程序一般都是由自己编写的代码和系统框架(systemframeworks)组成,系统框架提供一些基本infrastructure给所有App来运行,而你提供自己编写的代码来定制App的外观和行为。因此,了解iOSInfrastructure和它们...

    IOS应用源码之AISTestDemo.zip

    《iOS应用源码解析:AISTestDemo深度剖析》 在iOS开发领域,源码学习是提升技术能力的重要途径。本篇文章将深入探讨名为"AISTestDemo"的iOS应用源码,通过分析其结构、功能及实现机制,帮助开发者更好地理解和运用...

    IOS应用源码——TableFlipDemo.rar

    《iOS应用源码——TableFlipDemo深度解析》 在iOS应用开发中,Table Flip效果是一种常见且引人注目的交互设计,它使得用户能够通过手指的翻转动作,直观地在两个视图之间切换,为应用程序增添了趣味性和动态感。...

    IOS应用源码——ParticleDemo.zip

    《iOS应用源码解析——ParticleDemo深度探索》 在iOS应用开发中,源码学习是提升技术能力的重要途径。今天我们将深入探讨一个名为"ParticleDemo"的iOS应用源码,通过对这个项目的剖析,来理解iOS应用的核心机制以及...

    IOS应用源码——ToyClock.rar

    《iOS应用源码——ToyClock深度解析》 iOS应用源码——ToyClock,这是一个专为iOS平台设计的源代码项目,旨在帮助开发者深入理解iOS应用的开发流程、编程技巧以及苹果的开发环境Xcode的使用。通过分析这个项目,...

    IOS应用源码之antekpiechnik-touch-qwerty-a4f737b.zip

    通过对"antekpiechnik-touch-qwerty-a4f737b.zip"中的源码进行深度解析,开发者不仅可以理解iOS键盘开发的底层机制,还能学习到Antek Piechnik的编程思路和最佳实践,这对于提升iOS应用的用户体验和功能实现有着重要...

    IOS应用源码——通过OpenGL加载图像 DrawPixels.rar

    这个压缩包文件“IOS应用源码——通过OpenGL加载图像 DrawPixels.rar”包含了开发iOS应用程序时使用OpenGL ES加载图像的相关源代码。OpenGL ES是OpenGL的一个轻量级版本,主要用于嵌入式系统,包括移动设备如iOS设备...

    IOS应用源码——通过OpenGL加载图像 DrawPixels.zip

    - `DrawPixelsAppDelegate.h` 和 `DrawPixelsAppDelegate.m`:这是应用程序的委托类,处理应用生命周期中的事件,如启动、暂停、恢复等。 - `main.m`:这是程序的入口点,负责启动应用程序。 - `DrawPixels_...

    Developing iOS 7 Apps for iPhone and iPad ppt (1-10)

    斯坦福大学的"Developing iOS 7 Apps for iPhone and iPad"课程是学习如何构建iOS应用程序的宝贵资源,尤其适合初学者和有经验的开发者。这门课程采用最新的Xcode 5作为开发环境,针对苹果公司的操作系统iOS 7进行...

    ios学习路线iOS学习路线

    在iOS学习之旅中,开发者需要掌握一系列技术和工具,才能创建出色的应用程序。以下是一条详细的iOS...通过逐步学习和实践,你将能够构建出令人印象深刻的iOS应用程序。记住,不断学习和适应新技术是这个行业的关键。

    IOS源码应用Demo-ABC123:一个挑战记忆力的游戏 ABC123.zip

    《ABC123:iOS源码应用Demo的深度解析》 在移动开发领域,iOS平台以其卓越的用户体验和丰富的功能特性吸引着众多开发者。本文将深入探讨一款名为"ABC123"的iOS源码应用Demo,这是一款旨在挑战用户记忆力的游戏。这...

    ArcGIS API for iOS进阶教程课件

    - **内存管理**:iOS应用需手动管理对象生命周期,使用alloc/new/copy分配内存,dealloc释放内存,通过引用计数机制避免内存泄漏。 #### ArcGIS API for iOS开发实践 ArcGIS API for iOS的强大之处在于其实现了地图...

    iPhone与iPad开发实战——精通iOS开发2.rar

    接下来,你需要掌握Cocoa Touch,这是iOS应用程序的基础框架,提供了UI设计和事件处理的基本工具。通过学习Storyboards和Auto Layout,你可以构建适应各种屏幕尺寸和方向的用户界面。同时,还要了解UIViewController...

    Programming iOS 8 Dive Deep into Views, View Controllers, and Frameworks

    2. 视图控制器(View Controllers):视图控制器管理视图的生命周期、状态和行为,是iOS应用程序架构的关键组成部分。书中会探讨UIViewController的使用,包括加载视图、处理用户事件、导航控制器...

    IOS系统资源类

    在iOS开发中,"BUNDLEID"(Bundle Identifier)是一个非常关键的概念,它是一个独一无二的字符串,用于识别iOS应用程序的身份。这个字符串通常遵循反向DNS(Domain Name System)格式,例如"com.example.myApp",它...

    Delphi_深度编程及其项目应用开发,Delphi_深度编程及其项目应用开发

    这涵盖了软件工程的整个生命周期,旨在培养读者的系统设计和项目管理能力。此外,还会讲解如何使用Delphi进行跨平台开发,利用FireMonkey框架创建iOS和Android应用,实现真正的多平台部署。 本书还将涉及一些高级...

    iOS游戏应用源代码——unindented-copong-iphone-ae6a6c9.zip

    5. `main.m`或`AppDelegate.swift`:应用的入口点,负责启动和管理应用生命周期。 二、编程语言与框架 1. Objective-C/Swift:iOS游戏通常使用这两种语言之一编写,Objective-C是早期iOS开发的主流,而Swift则是...

    lkd-helper-iOS:USTL的校园应用程序

    在应用的实现过程中,开发者可能使用了苹果的UIKit框架,这是iOS应用开发的核心框架,提供了创建用户界面、处理事件、管理应用程序生命周期等所有必要的工具。通过Storyboard和XIB文件,开发者可以可视化地设计界面...

    ios-MBProgressHUD-Extension.zip

    《iOS开发:MBProgressHUD扩展的深度解析与应用》 在iOS应用开发中,用户界面的响应性和体验至关重要。当应用程序执行耗时操作时,如网络请求、数据加载等,为了提供良好的用户体验,通常需要显示进度指示器,让...

Global site tag (gtag.js) - Google Analytics