ios后台运行

2023-11-08

iOS在升级到4.0以后就支持了多任务了。下文将详细介绍一下这个特性。

1、检查设备是否支持多任务

Apple出于性能的考虑,并不是所有的iOS设备升级到iOS4以后都支持多任务,比如iPhone 3G。如果你的应用在没有多任务特性时会出问题,为了保持应用的健壮性,你应该对此进行判断并处理。你可以通过调用UIDevice对象的multitaskingSupported属性来获取当前设备是否支持多任务。

if(![UIDevice currentDevice].multitaskingSupported){

//不支持多任务时应做的处理

}

2、基本多任务特性

通常,当用户按一下Home键,当前应用就会被进入后台,应用处在后台运行状 态一小段时间后,就会进入挂起(suspend)状态,此时应用不会再执行任何代码。如果系统在运行其他应用时内存资源不足,这个挂起的应用甚至有可能被 系统退出,释放内存以供活动的应用使用。只有当用户再次运行此应用,应用才会从挂起状态唤醒,代码得以继续执行。这就是iOS4带来的基本的多任务特性,这个特性是一般应用默认支持的,就是说你的应用不需要任何修改就能支持基本多任务特性。

既然是多任务你应该会在应用进入后台时做一些处理,比如暂停一些界面的定时刷新或网络请求。同时,或者你会在程序进入前台时执行一些恢复操作。在你的应用的application delegate里有2个消息用于处理这些消息:

- (void)applicationDidEnterBackground:(UIApplication *)application {
//进入后台时要进行的处理
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
//进入前台时要进行的处理
}

 IOS可以后台执行的几种方案。

当然你也许不会都在application delegate处理所有的事情。如果你要在其他对象中处理,那么你就需要注册系统通知了,这两个通知分别是 UIApplicationDidEnterBackgroundNotification和 UIApplicationWillEnterForegroundNotification。

也许你需要更多的多任务特性,比如后台播放音乐或者是后台进行GPS跟踪。这会是下面介绍的内容。

3、后台播放音乐

通常,一般应用在进入后台时,任何声音就将会停止。这也许不是我们所想要的。要想让自己的应用支持后台播放,首先要修改应用的Info.plist 文件,你需要在Info.plist文件中添加UIBackgroundModes字段,该字段的值是应用支持的所有后台模式,是一个数值类型。目前此数 组可以包含“audio”、“location”和“voip”这三个字符串常量,如果要支持后台音乐播放,你就需要包含“audio”,其余两个会将在 后面讲到。

同时,你也应该设置一下应用程序的Audio Sesstion。这个是必需的,如果不设置Audio Sesstion,应用就可能进入后台时Audio Sesstion失活而停止播放。一般需要这么设置就可以了:

AVAudioSession *session = [AVAudioSession sharedInstance];  
    [session setActive:YES error:nil];  
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];

4、后台GPS跟踪

和后台播放音乐类似,若要支持后台GPS跟踪,你就需要在Info.plist文件中UIBackgroundModes字段对应的数组中增加“location”字符串。

5、后台voip支持

由于voip应用需要一个长连接到服务器,为了让这类应用能正常工作,iOS中假如后台voip支持特性。为支持这一特性,需要在Info.plist文件中UIBackgroundModes字段对应的数组中增加“voip”字符串。

此外你仍然需要配置一下你的网络连接,以便支持后台连接。iOS提供的网络连接库有几种,下面一一说明:

如果你使用的是NSStream,如NSInputStream或NSOutputStream,需要调用setProperty:forKey:将Key为NSStreamNetworkServiceType的value设置为
NSStreamNetworkServiceTypeVoIP

如果你使用NSURLRequest,需要调用setNetworkServiceType:将网络类型设置为NSURLNetworkServiceTypeVoIP

如果你使用CFStream,如CFReadStreamRef或CFWriteStreamRef,需要调用 CFReadStreamSetProperty或CFWriteStreamSetProperty将 kCFStreamNetworkServiceType属性设置为kCFStreamNetworkServiceTypeVoIP。

 

 

 

  1.实现长时间的后台任务  IOS应用程序可以请求在后台运行的特殊服务有:     audio:在后台提供声音播放功能,包括音频流和播放视频时的声音     location:在后台可以保持用户的位置信息     voip:在后台使用VOIP功能  这些应用程序并不连续的运行,但是会被系统框架在合适的时间唤醒,以实现这些服务。  2.在后台完成有限长度的任务     在被终止之前的任意时间,应用程序会调用beginBackgroundTaskWithExpirationHandler:方法让系统给出额外的时间来完成一些需要在后台长时间执行的任务。 (UIApplication的backgroundTimeRemaining属性包含程序运行的总时间)。一般它的执行时间是应用程序转入到后台的600秒之内执行,超过600秒自动切 断。 3.Local Notification定时启动 应用程序可以预先安排时间执行local notifications 传递。

 

 

关于iOS多任务的一些扫盲老 压根没有任何独立思考或者连独立思考能力都没有的所谓Android Geek们在不同场合解释一些问题是很耗气费神的事情,于是把思路提取出来以后单发链接就可以了。

打从这世界出现了操作系统以来,就没有过所谓真正的“多任务”。所谓多任务,无非是CPU速度够快而足以支撑极短时间内在多个进程内动作罢了。而所谓的“单任务”,无非是只能让当前任务独享资源罢了。

简单来说,iOS 4 app类型可以分为三种:
1. 保存现场。按下Home键10秒内直接杀死进程,并释放内存。
2. iOS支持的“多任务”。按下Home键转入多任务状态,保留在内存中,但只能系统允许的动作:比如GPS,比如VoIP,比如Streaming Music等等。
3. 真正的桌面级别的多任务。只有Safari/Mail是,苹果嫡系大都都不是。这个级别的app在后台没有任何限制动作。

无限制动作的程序,一会在用户无察觉的情况下耗光电力,二会有安全上面的问题(君还记得那些个在后台依旧默默发送你的个人消息程序吗?)
顺便提一句,后两种占用内存的app,也会在任意时间从内存中被砍掉,取决于你是否动用了其它app而导致内存不足。
真正不会被砍掉的后台,只有苹果那个通知系统。

其实可以回顾一下iOS是怎么一步步引入现在这个机制的。
刚出生,什么都没有,单纯的单任务。
iPhone OS 3.0,引入通知架构,当年全部机型可用;Android晚了一年,2.2才有此功能,到这个时候相信才有90%上下机器用上。
iOS 4.0,引入有限制的后台多任务

搞这么复杂干嘛?直接像Android一出生那样所有app一个小虚拟机,无任何限制动作,让根本没有内存管理经验和资源消耗概念的全世界最大民工群Java程序员们写的app任意地跑着吧!
答案只有两个:电力,安全。安全不说,如何在保持多任务优势的同时,避免消耗过多电力,苹果花了很多心思;而不是像webOS/Android一样,简单粗暴桌面级的多任务。iPhone 4甚至在硬件上面也下了苦功,利用3D层叠技术组装A4芯片,内部元件高度集成,并把天线移至体表,增加内部电池空间。结果就是iPhone 4 1420 vs. i9000 1500。

其实至iPhone OS 3,已经足够应付大部分应用了。用户根本无从知道app的实际运行状态,保存现场让app看起来不像是刚打开一样,通知系统又可以在后台默默推送消息。事实上,当前95% iOS app依旧只有保存现场 + 通知系统这样的组合,比如很多twitter客户端,大部分人根本不会注意到它不是真正意义上的“多任务”。很震撼的事实,但确实95%的应用场景根本不需要所谓真正的“多任务”。

但是时代在变。真正需要多任务的东西出现了:电台要stream,IM要stream,GPS要stream,多任务必须提上日程。iOS 4加进了,WP7刚刚加进了,Android/webOS打一出生就有。从本质来说,iOS/WP7/Android/webOS跑在内存中的后台程序,唯一的区别就是,iOS/WP7限制了它可以做的事(这就是为什么它们一出生都没有多任务的原因,这个架构很复杂,不是几百行中文字可以说明白的),而Android/webOS没有;从技术上面来说,iOS/WP7/webOS三者架构相当,Android独立门户。

于是很可笑,有无限制,成了真“多任务”和伪“多任务”的区别;而后者架构更复杂,可以套用一句“吃力不讨好”。
为什么要做吃力不讨好的事?答案依旧在上面,电力和安全。当然你可以说iPhone电力也没好到哪里去,安全也就一般般嘛。暂且抛掉这两样不谈,实际看看iOS有限制后台app,和Android完全无限制后台app有什么不同:

相信我,最终你会发现iOS上最令人诟病的app,是那些不支持标准协议的软件平台商们,比如腾讯。因为iOS后台允许的动作,已经覆盖了全部大大小小的通信开源协议。

随便提提腾讯的QQ协议:
大家都用过很多msn/gtalk客户端,但是可能很多人都没有用过非腾讯QQ客户端(曾经有过,但是腾讯把他送进了监狱)。腾讯在QQ协议上面所做的事,一是不开放,二是隔两三个月就换一次协议,三是封杀全部三方客户端。

那么最终多任务的对比无非是,拥抱标准 vs. 允许私有。苹果作为一个弱势厂商,一直以来受够了私有标准的苦。比如一直到现在都没法用非IE支付的中国网银们,正是微软自己私有标准的后果,也是苹果为什么要开做开源WebKit的原因。软件可以封闭,硬件可以封闭,但是要拥抱标准,这是苹果的理念。

结论很简单:如果你要用一些私有协议的app(在中国我想大部分人都要用QQ的),请别看别买别关注iPhone;如果你用的都是一些拥抱标准的app,那么推荐你使用iPhone,因为它更省电更安全。关于说iOS多任务有什么用:除了不能支持私有协议外,和Android一样

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios后台运行 的相关文章

  • flutter使用坑点记录

    container点击失效 一般container点击 可能会在container外包一层 GestureDetector 有时候你会发现点击事件无效或是只有点击了文字或图片之后才会触发点击事件 解决办法 1 为Container设置背景颜
  • 免费微信小程序商城源代码,基于Uni-App,实现一码多端

    微信商城功能介绍 购物流程 符合大众习惯的首页 分类 商品展示 下单流程 智能搜索商品 会员体系 手机号登录 微信登录 用户积分 商品收藏 商品评论 足迹 营销工具 满额包邮 优惠券 满减和满折扣 定向发放 积分抵扣 10级定价 订单管理
  • 2.2.4 读取EXCEL数据与Error: ‘\U‘ used without hex digits in character string starting ““C:\U“报错

    当我们需要用R读取EXCEL数据时我们应首先在R程序中输入以下命令 install packages xlsx repos https mirrors ustc edu cn CRAN 来安装读写 Excel 文件需要安装扩展包 当安装完成
  • ps景观平面图转鸟瞰图_ps如何制作鸟瞰图 ps制作鸟瞰图教程

    ps如何制作鸟瞰图 大家都知道ps是一款强大的制图绘图工具 而在我们制作规划图的时候 鸟瞰图是最好的展示图 那么ps就派上用场了 使用ps制作的鸟瞰图可以杜绝凭空想象的随意性 让整个图变得更加的精确 那么下面我们就一起来看看吧 1 拿相机拍
  • 正则 去掉括号内的内容

    前言 刚开始以为 就是括号内任意字符了 试了不行 错误点 1 括号需要转移 是正则表达式关键字 2 不是任意字符 而是 除了右括号的任意字符 String content i want to thank you thank very dfl
  • 嵌入式Linux人脸检测libfacedetection

    人脸检测 此库依赖Opencv 所以首先要移植Opencv到板子上 笔者使用LVGL搭建了一个界面 界面有些卡顿 主要原因是文件存取较慢 演示效果如下 OpenCV 首先要交叉编译Opencv 参考 https blog csdn net
  • 统计学——简单理解方差分析

    方差分析 方差分析 analysis of variance 简写为ANOVA 指的是利用对多个样本的方差的分析 得出总体均值是否相等的判定 它是一种分析调查或试验结果是否有差异的统计分析方法 也就是检验各组别间是否有差异 方差分析按照以下
  • linux 网卡队列深度,linux 磁盘队列深度nr_requests 和 queue_depth

    nr requests 和 queue depth 修改配置值 nr requests 和 queue depth 区别 iostat 的avgqu sz lsscsi l 的队列大小 iostat nr requests 和 queue
  • MOEA/D 算法详解

    MOEA D 笔记 1 聚合方法 1 1 权重求和法 Weighted Sum Approach 1 2 切比雪夫聚合法 Tchebycheff Approach 1 3 边界交叉法 Boundary Intersection Approa
  • JS:MessageChannel

    MessageChannel API MessageChannel 为通信管道对象 使用 MessageChannel 构造函数将返回一个 MessageChannel 对象 返回的对象中包含两个 MessagePort 对象 可以实现双端
  • 关于numpy中seed随机数种子的使用

    numpy random seed 随机种子生成器 使下一次生成的随机数为由种子数决定的 特定 的随机数 如果seed中参数为空 则生成的随机数 完全 随机 gt gt gt import numpy as np gt gt gt np r
  • 电脑查询域名对应IP的过程

    1 浏览器缓存 当用户通过浏览器访问某域名时 浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址 若曾经访问过该域名且没有清空缓存 便存在 2 系统缓存 当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是
  • 4键电子手表说明书_电子手表怎么调(电子手表的四个键的功能各是什么)

    展开全部 四个功能键分别是 左上角按键e68a84e8a2ad62616964757a686964616f31333433643062LIGHT 右上角按键ST SP 左下角按键MODE 右下角按键RESET 具体操作步骤如下 1 首先 在
  • (干货)微信小程序组件封装

    概述 自己封装的一个比较简单微信弹窗小组件 主要就是教会大家对微信小组件的用法和理解 因为微信小程序对组件介绍特别少 所以我就把自己的理解分享给大家 一前言 相信大家在开发小程序时会遇到某个功能多次使用的情况 比如弹出框 这个时候大家首先想
  • 自动化测试之RobotFramework框架

    自动化测试之RobotFramework框架 很久没更新 因为我跳槽了 之前学习了入门级别性能测试的Jmeter 发现自由度真的差 又想着找一个上限比较高的python测开的工作 所以换到了现在的工作 我们公司使用的是wxpython基于r
  • 学习日记——基于MDK的智慧物流案例开发(2020.2.19)

    准备阶段 开发板 小熊派开发板 提前组装 将 NB卡 NB35 A通信扩展板 E53 ST1GPS模块 IDE LiteOS Stiudio 小熊派的编译环境 平台 华为云账号 开通开发中心的权限 若使用软件开发服务进行应用开发 还需要开通
  • QT drawPixmap和drawImage处理图片模糊问题

    drawPixmap和drawImage显示图片时 如果图片存在缩放时 会出现模糊现象 例如将一个100x100 的图片显示到30x30的区域 这个时候就会出现模糊 如下 实际图片 这个问题就是大图显示成小图造成的像素失真 当我们在1080

随机推荐

  • ctf.show_web12

    f12提示 传参 cmd hightlight file index php 得到源码
  • 【抽五分钟】使用VuePress创建在线文档中心

    文章目录 安装初始化 核心配置 导航栏配置 侧边栏配置 静态资源配置 nginx部署 typora编写 安装初始化 全局安装 npm install g vuepress 创建目录 mkdir vurepress blog 项目初始化 cd
  • 使用 pair 做 unordered_map 的键值

    背景 标准库中 unordered map 是使用哈希表实现的 对于内置类型标准库通过 std hash 提供了哈希函数的实现 因此若采用非内置类型做键值 则需要程序员自己提供其哈希函数的实现 用 pair 做键值 自定义哈希函数 stru
  • Spring-Boot-Admin--快速学习--按应用实例添加标签--08

    代码地址 https gitee com DanShenGuiZu learnDemo tree master springboot admin learn 一 按应用实例添加标签 Tags 是我们区别同一应用的不同实例的方法 1 1 举例
  • 如何用电路区分 OC门与TTL

    这是两个概念 oc门是输出驱动方式 指集电极开路驱动 在电路中如果输出有一个电源到输出端的上拉电阻通常就是OC门 OC门只能灌电流 你说的TTL可能是指没注明的图腾拄驱动 即用不同极性的两个管子推拉驱动 不需要外接电源 高电平时可给负载提供
  • Vue第二篇:概念深度剖析

    参考链接 https www bilibili com video BV1oj411D7jk spm id from 333 788 recommend more video 0 vd source 3969f30b089463e19db0
  • 人生如一趟旅行

    http www putclub com html download life prose 2011 0311 27595 html Life is like a train ride We get on We ride We get of
  • HikariPool一直报连接不可用

    前言 一开始发现测试环境报错 原先配置6现在配置20依然还是很频繁的报错 想看下底层到底如何处理的导致这个问题 到底什么情况 排查 看了下日志连接数大量的空闲 看日志活跃的却是满的疑惑 2023 07 18 13 17 15 258 xxl
  • Java EnumMap putAll()方法具有什么功能呢?

    转自 Java EnumMap putAll 方法具有什么功能呢 下文笔者讲述EnumMap中putAll 方法的功能简介说明 如下所示 EnumMap中putAll 方法的功能 向map中批量添加一个map元素 EnumMap中putAl
  • MSBuild入门(续)

    MSBuild基本概念 续 在上一篇简单的介绍了下MSBuild中的四个基本块 每块介绍比较单薄 在这里对在大多数的项目模版生成的 proj文件中比较常见一些用法和概念做些补充 主要有一下几方面 MSBuild特殊字符 MSBuild保留的
  • 狄利克雷卷积 && 莫比乌斯反演

    狄利克雷卷积 莫比乌斯反演 狄利克雷卷积 数论函数及其运算 数论函数是指定义域是正整数 值域是一个数集的函数 加法 逐项相加 即 f h n f n h n 数乘 这个数和每一项都相乘 即 xf n x f n 狄利克雷卷积 定义两个数论函
  • Verilog 实现千兆网UDP协议 基于88E1111--数据发送

    Verilog 实现千兆网UDP协议 基于88E1111 数据发送 注 此版本没有添加ARP PING 等 未完待续 注 项目采用Verilog开发 基于Vivado编译器 UDP User Datagram Protocol 一种基本的
  • Ubuntu上面安装go语言

    一 下载go语言安装包 官方地址 https golang google cn dl 我这里下载的是go1 18 4 linux amd64 tar gz版本 二 把压缩包传入linux系统中 1 可以通过xshell连接Ubuntu系统
  • 关于海康,宇视,天地伟业摄像头调试

    最近在项目中需要读取摄像机的内容 现有的摄像机有海康威视 宇视 和天地伟业三家的摄像机 一开始 天地伟业和宇视都给了demo 即html和css代码 是可以读取视频流的 但是海康威视没有给demo 只是告诉我们可以通过vlc来读取视频流的内
  • 使用Inno Setup 打包成exe安装包+执行外部脚本文件

    有时候我们将软件需要做成类似下载后双击就能安装的程序 那么就需要使用打包工具进行打包 打包工具很多 有的简单 有的过程也比较复杂 如果有能力 自己可以写一个安装器 类似腾讯视频 优酷视频 哔哩哔哩的PC安装界面 这种就特别高大上 今天 主要
  • c++调用mxnet模型做预测

    python在深度学习领域很火 做实验用python很舒服 但是生产环境下可能还是需要c c 那么问题来了 mxnet训练出来的模型如何在c c 下调用 以下是一些填坑的经验分享一下 mxnet支持c c 调用模型 但目前不是全部的网络模型
  • 双向可控硅的四象限触发方式

    双向可控硅的四象限触发方式 双向可控硅是在普通可控硅的基础上发展而成的 它不仅能代替两只反极性并联的可控硅 而且仅需一个触发电路 是目前比较理想的交流开关器件 其英文名称TRIAC即三端双向交流开关之意 尽管从形式上可将双向可控硅看成两只普
  • SpringBoot入门到项目实战,带你快速上手springboot

    动力节点王鹤老师的SpringBoot入门系列课程 通俗易懂 基于SpringBoot2 4版本讲解 从细节入手 每个事例先讲解pom xml中的重要依赖 其次application配置文件 最后是代码实现 让你知其所以 逐步让掌握Spri
  • 适合Python 的5大练手项目,你练了么?

    往期好文推荐 0基础不用怕 从0到1轻松教你入门Python python系统学习流线图 教你一步一步学会python 但是在练手项目的选择上 还存在疑问 不知道要从哪种项目先下手 python教程入门学习 首先有两点建议 最好不要写太应用
  • ios后台运行

    iOS在升级到4 0以后就支持了多任务了 下文将详细介绍一下这个特性 1 检查设备是否支持多任务 Apple出于性能的考虑 并不是所有的iOS设备升级到iOS4以后都支持多任务 比如iPhone 3G 如果你的应用在没有多任务特性时会出问题