iOS应用状态变更

应用启动周期

当应用启动时,它从未运行状态到活跃或后台状态,简单地过渡未激活状态。作为启动周期的一部分,系统为应用创建一个过程和主进程并在主进程上调用应用的主函数。来自你的Xcode项目的默认主函数及时将控制交移到UIkit框架——该框架在初始化应用和准备运行中做了大部分工作。

启动应用到前台

如果应用在后台启动——通常是处理一些后台事件,与前台的主要差异就是不管应用是否激活,都会进入后台处理事件不久后暂停。当进入后台后,系统仍会加载应用程序的用户界面文件但不会应用窗口。

下面是应用在后台启动的流程图

默认主函数

#import <UIKit/UIKit.h>
 
int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
    }
}

在程序启动时该干什么呢?

  • 检查发布选项字典,查看为什么应用发布以及是否合理响应的信息
  • 初始化应用程序的关键数据结构
  • 准备应用窗口与视图显示

响应中断

处理基于警告的中断

中断发生时该怎么做呢?

  • 停止定时器和其它周期性任务
  • 停止任何元数据查询
  • 不要初始化任何新任务
  • 暂停电影回放(飞行模式下除外)
  • 若当前应用为游戏,则进入暂停状态
  • 减低OpenGL ES的帧速率
  • 暂停任何执行非重要代码的调度或操作队列(在非活动态时可以继续处理网络请求和其它时间敏感的后台任务)

从前台移到后台

后台应用的内存使用

移除强引用的对象:

  • 图形对象
  • 可从磁盘加载的大媒体或数据文件
  • 应用不再需要且可以之后轻松创建的任何其它对象

为帮助减轻应用的内存足迹,在应用程序移到后台时,系统会自动清理一些分配的数据。

主要运行循环

主运行循环负责处理所有用户相关的事件

iOS状态变更的更多相关文章

  1. IOS - 总结(网络状态变更)

    - (void)initNetworkMonitor { NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com/" ...

  2. ios 状态码

    9001 无网络 9002 url错误 9003 链接超时 9005 json解析错误 9503 503 error

  3. iOS开发-状态模式

    状态模式允许对象内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式看起来和策略模式比较相像,策略模式是将可以互换的行为封装起来,然后通过使用委托的方式,决定使用哪一个行为,状态也是封装行 ...

  4. 在Windows7系统上能正常使用的程序,Windows10运行后部分状态不能及时变更

    这是最近在开发一个通信项目时遇到的问题,一开始以为是窗体样式的原因,把窗体换成系统窗体之后还是在Win10上不能正常使用,后面突然想到会不会是匹配原因,试了一下,结果真的就正常了. 问题:例如一个通信 ...

  5. iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  6. IOS应用程序生命周期

    一.IOS应用的5种状态 Not Running(非运行状态) 应用没有运行或被系统终止. Inactive(前台非活动状态) 应用正在进入前台状态,但是还不能接受事件处理. Active(前台活动状 ...

  7. IOS设计模式之三(适配器模式,观察者模式)

    本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...

  8. iOS语音播放之切换听筒和扬声器的方法解决方案

    关于流媒体播放的相关知识可以加本人QQ:564702640 一起来讨论 [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; // ...

  9. iOS下微信语音播放之切换听筒和扬声器的方法解决方案

    [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; //建议在播放之前设置yes,播放结束设置NO,这个功能是开启红外感应 // ...

随机推荐

  1. Windbg Extension NetExt

    Windbg Extension NetExt 摘要 : 在使用WINDBG做debugging的时候,需要一个好的工具帮助进行数据分析. 最常见的extension包括SOS, PSSCOR.  N ...

  2. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  3. Fizzler

    Fizzler 抓取网站数据不再是难事了,Fizzler(So Easy)全能搞定 首先从标题说起,为啥说抓取网站数据不再难(其实抓取网站数据有一定难度),SO EASY!!!使用Fizzler全搞定 ...

  4. WebApp 框架

    Razor 在WebApp 框架的运用   前面有两章介绍了WebApp框架<WebApp MVC,“不一样”的轻量级互联网应用程序开发框架>和<WebApp MVC 框架的开发细节 ...

  5. PHP 8: PHP的运算符

    原文:PHP 8: PHP的运算符 本章将介绍PHP的运算符.运算符这个问题在每种语言里都有,因为我们已经熟悉了编程语言里的一种或是多种,所以只需要了解一下就行了.概括一下吧.PHP运算符有很多种,看 ...

  6. PE文件结构(五岁以下儿童)基地搬迁

    PE文件结构(五岁以下儿童) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会如果程序被装入时使用的默认ImageBase基地址(VC默认 ...

  7. Java 之复合赋值运算符

    1.引入问题 切入正题,看下面代码,结果应该是怎么样的 public class App{ public static void main( String[] args ){ byte a=1 ; i ...

  8. 《Visual Studio Magazine》2013年读者选择奖—软件类

    <Visual Studio Magazine>会在每年的下半年向读者发出投票邀请,读者将在28个大类,超过500个开发工具的名单中选出他们认为最好的产品,以票数评出各分类的金.银.铜奖. ...

  9. HDU1024 Max Sum Plus Plus(DP)

    状态:d(i,j)它代表前j划分数i部并且包括第一j最佳结果时的数.g(i,j)表示前j划分数i最好的结果时,段,g(m,n)结果,需要. 本题数据较大.需採用滚动数组.注意:这题int类型就够用了, ...

  10. ASP.NET抓取网页内容

    原文:ASP.NET抓取网页内容 一.ASP.NET 使用HttpWebRequest抓取网页内容 这种方式抓取某些页面会失败 不过,有时候我们会发现,这个程序在抓取某些页面时,是获不到所需的内容的, ...