iOS和Android后台机制对比
转自:http://blog.csdn.net/zsch591488385/article/details/27232881
一、iOS的“伪后台”程序
首先,先了解一下ios 中所谓的「后台进程」到底是怎么回事吧?
Let me be as clear as I can be: the iOS multitasking bar does not contain "a list of all running apps". It contains "a list of recently used apps". The user never has to manage background tasks on iOS.
首先我们得搞清楚的是,iOS 中所谓的「后台驻留」并不是指「执行中的程序」,而是「最近使用过的程序」,也可以瞧瞧Apple 的知识库文章怎么写的:
按两下主画面按钮后,显示的是「最近用过的应用程序」,所以别把它想成Mac OS X 中的Command + Tab 键所显示的切换程序列;你可以试试看将iPhone 关机再开机,然后按两下Home 键,应该会发现先前那些程式还是出现在那里,因为它其实是你最近使用过的程序使用记录,或像是浏览器中的浏览记录)。
如果你一个一个去清除 "后台驻留" 的程序,就像是一笔一笔删除浏览记录中的项目一样,是没有太大意义的(除非你不想让其他人看到你曾经用过什么程式,或者想杀时间、太无聊了),也不会对电力或记忆体有什么帮助。
iOS 的多任务处理其实是很聪明的,系统会自动中止在背景执行的程序,在有需要时,也会将被中止的程式suspended(注:"中止的程式"不是指关闭程序,而是指由前台转向后台的程序,程序在后台并不真正运行,不要和关闭程序混淆了) 从内存中移除。因此,iOS 装置的使用者根本就不需要担心怎么管理这些执行中或不在执行中的程序,尽管放心用、轻松玩就是了!
一般说来,所有程式进入背景后都还有5 秒的执行缓冲时间,有些程序可以要求延长到10 分钟(这些当然是由开发人员在设计与提交程式时决定和声明);
因此,在你按下Home 键后,本来的程式就会退到背景,如果它有额外的背景执行作业,超过10 分钟还是会被iOS 中止;所以,还是别担心了!
但是,也有例外情况,某些特殊类型的程式是被容许在背景中持续执行的,像是会持续在背景播放音乐的程序、GPS 程序、VOIP 程序、Newsstand 以及周边配件附属的程序,不过只要这些程序不再执行动作,就会变成中止的程式,像是音乐拨完了、杂志下载完了... 因此,使用者其实也没必要太过留意这些程序。
you do not have to manage background tasks on iOS. The system handles almost every case for you and well written audio, GPS, VOIP, Newsstand and accessory apps will handle the rest.
二、IOS的“多任务”发展史
自从出现了操作系统以来,就没有过所谓真正的“多任务”。所谓多任务,无非是CPU速度够快而足以支撑极短时间内在多个进程内动作罢了。而所谓的“单任务”,无非是只能让当前任务独享资源罢了。
简单来说,IOS 4 APP类型可以分为三种:
1. 保存现场。
即:按下Home键10秒内直接杀死进程,并释放内存。一般说来,所有程序进入背景后都还有5 秒的执行缓冲时间,有些程序可以要求延长到10 分钟(这些当然是由开发人员在设计与提交程式时决定和声明);因此,在你按下Home 键后,本来的程式就会退到背景,如果它有额外的背景执行作业,超过10 分钟还是会被iOS 中止。
2. iOS支持的“多任务”。
即:按下Home键转入多任务状态,保留在内存中,但只能系统允许的动作:比如GPS,比如VoIP,比如Streaming Music等等。
3. 真正的桌面级别的多任务。
即:只有Safari/Mail才是真正的多任务,苹果嫡系大都都不是。这个级别的app在后台是没有任何限制动作。(对于无限制动作的程序,一是会在用户无察觉的情况下耗光电力,二是会有安全上面的问题)。
注意:对于上述三种级别,后两种会占用内存的APP,也会在任意时间从内存中被砍掉,取决于你是否动用了其它app而导致内存不足。真正不会被砍掉的后台,只有苹果那个通知系统。
其实可以回顾一下iOS是怎么一步步引入现在这个机制的:
1. 刚出生,什么都没有,单纯的单任务。
2. iPhone OS 3.0,引入通知架构。几乎当年全部机型可用;Android晚了一年,2.2才有此功能,到这个时候相信才有90%上下机器用上。
3. iOS 4.0+,引入有限制的后台多任务。
搞这么复杂干嘛?直接像android一出生那样所有app一个小虚拟机,无任何限制动作,让根本没有内存管理经验和资源消耗概念的全世界最大民工群Java程序员们写的app任意地跑着吧!
答案只有两个:电力,安全。安全不说,如何在保持多任务优势的同时,避免消耗过多电力,苹果花了很多心思;而不是像webOS/Android一样,简单粗暴桌面级的多任务。iPhone 4甚至在硬件上面也下了苦功,利用3D层叠技术组装A4芯片,内部元件高度集成,并把天线移至体表,增加内部电池空间。
三、IOS的内存管理
其实在iOS中,它的后台跟塞班,Windows不一样,苹果是伪后台。你双击Home键打开的列表,仅仅是打开一个叫做“近期打开程序列表”的东西。在塞班和Windows、安卓这些智能系统中,当你把一个程序放到后台,他是活动的,跟在前台没有区别。而iOS不一样,你将程序放到后台去之后,iOS是将此程序给停掉,包括联网等等,各种进程都给停掉(iOS只给一部分进程留有后台运行权限,比如音乐播放之类的)。也就是说,这个程序基本算是死了……这样带来的好处就是,苹果一直只能只有一个程序在工作,其他的都会停掉,所以非常流畅(基本可以这么说,某些特殊的进程可以在后台跑的)。当然,以前一直被苹果用户给诟病的就是QQ不能挂后台,一按Home键就掉线就是这个原因(当然,苹果通过推送来解决这个问题)。虽然说程序被停了,但是,程序并没有在内存中释放。而是继续放在内存中,这样带来的好处就是你再次打开程序的时候,会回复到你之前关闭程序的界面,程序快速的继续运行。
那么,当内存中程序太多了,内存不够的时候怎么办?当内存不足的时候,iOS会依据自身判断出程序的优先级,之后清理程序占用的内存。比如音乐,应该就属于是优先级比较高的程序。iOS根据优先级,和使用次数来决定哪些程序首先清出后台。不只是简单的看时间。将程序踢出内存,就是所谓的挂起。从而释放内存,供新打开的程序使用。为了验证这一点可越狱机型的朋友可以专门下个插件(SwitcherMod),能将挂起的程序在后台显示为灰色透明,仍然在内存中的程序正常显示。
而运行大型游戏及耗内存的应用之前,大家可能会明显的感到卡顿,这是因为系统在释放足够大型程序运行的内存,可能涉及到很多的APP,这需要耗费一些CPU资源及时间,因此会产生卡顿
总结:你可以完全不去清后台,因为iOS会根据需求来自动释放不必要的内存。但是iOS在释放内存的时候,会占用CPU,导致短暂的卡顿。如果不在意这个,以后就直接忽略后台就好了。如果你觉得苹果是完美的,不能有卡顿。那就及时多清清没用的后台就好了。
四、Android后台机制
android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是自动关进程的软件。 到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。 但改动也可能带来一些问题,取决于值的设定。 那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说 android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢? 还有一个。为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。 以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。最后推荐一款进程管理软件,systempanel,market上能搜到,界面友好启动快,功能也不错,用于手动关闭进程很好的软件。
五、总结
1、后台程序的运行状态
IOS:分三类应用,大部分应用切换到后台会停止运行,部分应用(音乐、voip)在任务完成后也会停止,后台应用不耗cpu,但应用内存保持占用状态
Android:切换后台后应用进入onstop()状态,不是真正停止,这种状态下也不消耗cpu,部分Android应用自带后台服务,后台服务不会停止,需要消耗CPU,应用内存都会保持占用状态
2、后台应用内存管理
IOS:后台应用内存保持,在新开启应用申请内存时会有一套完善机制(重要性、打开次数等)确定回收哪些应用的内存,并为新开启的应用分配足够的内存;
Android:设置内存阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略十分消耗系统资源;每一个android都运行在一个虚拟机中,所以更耗内存
iOS和Android后台机制对比的更多相关文章
- WP与IOS与Android的后台机制相同与不同
简介: 1.Windows Phone与IOS的后台机制是 后台挂起 + 待机 + 通知代理 这样一种模式.也就是说一个程序在后台的时候,处于一种挂起状态,程序不能访问CPU.网络和其他系统资源,除了 ...
- iOS 和 Android 中的后台运行问题
后台机制的不同,算是iOS 和 Android的一大区别了,最近发布的iOS7又对后台处理做了一定的更改,找时间总结一下编码上的区别,先做个记录. 先看看iOS的把,首先需要仔细阅读一下Apple的官 ...
- android系统和ios系统是如何实现推送的,ios为什么没有后台推送
ios系统为什么没有后台推送? iOS 为了真正地为用户体验负责,不允许应用在后台活动.有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用). ...
- IOS研究之IOS7四种后台机制
IOS 7中,实际上APP拥有四种后台模式.不管是哪一种后台机制,均须要利用苹果给予的对应后台接口实现.IOS7系统中,开发人员能够灵活利用多种后台接口(API)实现更加智能的应用操作. 对获取 ...
- IOS 与ANDROID框架及应用开发模式对比一
IOS 和ANDROID操作系统都是目前流行的移动操作系统,被移动终端和智能设备大量采用,两者都采用了先进的软件技术进行设计,为了方便应用开发两者都采用了先进的设计模式.两者在框架设计上都采用了什么技 ...
- iOS和Android开发异同点(一)
说到移动开发,目前主流平台有谷歌的android os 系统,苹果iOS系统,和微软主打的windows Phone OS 系统,至于目前为啥移动开发中,安卓和iOS比较受欢迎,者要看三家产品的历史由 ...
- 你不可不知的iOS与Android差异点!
1.运行机制的区别 Android:沙盒运行机制,采用真后台运行,将所有的应用都保存在RAM中,按home键,程序被挂在了后台,实际未退出,因程序在后台运行,所以可以收到推送消息,导致内存越用越低,越 ...
- 全面盘点当前Android后台保活方案的真实运行效果(截止2019年前)
本文原作者“minminaya”,作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作了幅修订和改动,感谢原作者. 1.引言 对于IM应用和消息推送服务的开发者来说,在Androi ...
- IOS和Android系统区别详解
IOS系统(非开源,不可扩展) iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序. 1.iOS的编程语言Objective-C 2.IOS采用的是沙盒运行机制 ...
随机推荐
- LINQ获取两个List的交集
1.调用: UserList = UserList.ToList().Intersect(userIDList, new MyUserComparer()).AsQueryable(); 2.须要重写 ...
- 面试——谈谈对JAVA的理解
谈谈你对Java平台的理解.答:Java首先是一种面向对象的语言,语言特性有封装,继承,多态,泛型,Lamda表达式等; 第二个特性:支持跨平台,一次书写导出运行(write once,run any ...
- 转:Eclipse自动补全功能轻松设置
Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件 2012-03-08 21:29:02| 分类: Java | 标签:eclipse 自动补全 设置 |举报|字号 订阅 ...
- 3D数学读书笔记——矩阵基础番外篇之线性变换
本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...
- 自动播放——幻灯片缓冲效果&&带Loading效果的图片切换&&移动效果(按轨迹移动)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 怎样取消Macbook上顽固的开机启动项
博主遇到的一个顽固启动项是Cisco Anyconnect.我仅仅是偶尔须要使用VPN.可是安装了Cisco Anyconnect之后,每次开机它都会启动,非常烦人. 1 通过系统设置 首先,博主希望 ...
- react-native 常用组件的用法(二)
ScrollView组件 能够调用移动平台的ScrollView(滚动视图)的组件,同时还集成了触摸锁定的“响应者”系统.注意一定要给scrollview一个高度,或者是他父级的高度. 常用方法 on ...
- STL学习笔记(迭代器类型)
迭代器类型 迭代器是一种“能够遍历某个序列内的所有元素”的对象.它可以透过与一般指针一致的接口来完成自己的工作. 不同的迭代器具有不同的”能力“(行进和存取能力) Input迭代器 Input迭代器只 ...
- KB 2670838 make beginner suprise!
My project works fine and use pix for them many time without crash.One day, I start my project with ...
- 【SpringMVC学习11】SpringMVC中的拦截器
Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用 ...