» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[其他] 有没有高手从技术角度解释下ios的后台机制?

安卓为什么要那么大内存都不流畅,苹果那么点内存却如此流畅。其实这是源于两种系统内存管理机制的差异造成的。

我来说一下安卓的内存管理机制吧。安卓设计之初CPU性能、ROM读写性能低等问题,作为一个开放性系统,为了匹配市场上更多的硬件,采用了内存预读的方式解决CPU性能不足的问题。具体做法就是根据用户行为将可能会用的软件尽量预读进内存里面,当切换到已经预读的程序时,CPU就无需加载软件直接开始运算软件。当运行需要内存的时候,将会释放掉挂起的进程、部分预读的程序以提供足够的运行空间。

这就是为什么安卓用户的内存永远都塞得满满的原因。如果你用高端机可能感觉不到,但是如果你用512M或者更低的内存的时候这种机制你就会感觉很明显。比如你在玩了大型软件后退会桌面,你会发现桌面的插件在重新启动。没错,你桌面的插件被释放了。重新启动的速度很抓狂吧,那是因为CPU太慢了。安卓用户不是内存不够,而是CPU太慢,如果你的CPU足够快,那么就是256M的内存也能爽到飞起,当然你的手机是不会用i7或者至强处理器的。

至于这个机制为什么会导致运行大型程序会卡,平时使用也卡。
第一,我没有读过预读内存的逻辑,不负责地估计是:当你链接网络时,系统认为你会使用互联网相关的程序,然后加载所有带有互联网接入权限的软件……OK,在国内,基本上90%的程序都会有。
第二,运行所需的内存,是刚好分够给你的,比如你的程序需要50M,就给你分51M,运行所需内存突然要求增加,CPU就要重新释放和申请新的内存,这是一个不小的开销。
第三,系统释放的进程,可能正是你需要的,就像你运行大型软件,然后随时切回桌面。系统不认为桌面插件是不可释放的,然后咔嚓了,切回桌面的时候就得重新载入。

推送机制
谷歌和苹果一样,都是有服务器推送的,不同的是谷歌404了,安卓剩下3种推送机制,IBM的平台,推,拉。常用的是拉取,程序定时查询数据,然后软件给系统下拉栏推信息,这是一种伪推送方式。需要耗电耗流量驻留内存吃CPU。

安卓机制那么垃圾还是苹果的黑科技?
思路不一样。苹果挂起就是挂起,不会后台,极个别程序除外。安卓是可以多进程后台的,如果你的windows不准多进程后台你肯定会疯掉,winxp出过一个标准版,限制5进程的。结果它死了。苹果则是圈定你就只能单进程了,以确保资源有限的情况下程序流畅。

哪种好?
各有优劣。现在机能有限的情况下ios从用户体验上占优。但可以看到苹果在硬件性能提升的情况下逐步放开多进程。安卓则是在硬件逐步提高后用户体验也随之提高。现在用三儿子是很舒心的。以后手机将取代电脑成为个人信息中心,单进程永远只是个过渡方案且无法适应未来的需要。

对于安卓用户的建议
看了很多tg安卓用户,发现都有杀进程的习惯。我只能说停手吧。因为你在杀,有空闲内存系统就会往里填,这是一个死循环,你的电池就这样循环没了。不要保留windows的内存洁癖习惯。如果为了确保大型软件流畅适当的杀一下就比较合理。
另一个就是不要装乱七八糟的软件,不用就卸载,免得被加载。


本帖最近评分记录
  • 三无 激骚 +1 精品文章 2012-9-11 18:46

TOP

引用:
原帖由 小文 于 2012-9-11 09:55 发表

这就是为什么苹果每年要随着iPhone的升级而升级iOS,时代在变,硬件在变,系统跟着变就ok了。方案永远是在进化中的,不存在什么过渡方案,只存在当前而言最合适的方案。
你有想过如果苹果服务也404会怎么样吗?

可悲的是ios6并没有进一步放开后台,不知道是不是因为教主死的了原因。而且ios这种机制天生的缺陷,就是不会区分运行内存和预读内存。现在苹果只能限制那几个程序使用后台进程,保证了运行内存的足够。如果彻底放开的话,运行内存会被塞爆妥妥的。



TOP

引用:
原帖由 ffcactus 于 2012-9-11 10:08 发表

一派胡言。
求巨巨指导,莫非你是IT大牛,不好意思让你见笑了


TOP

引用:
原帖由 ffcactus 于 2012-9-11 10:26 发表


安卓走的是那一套老的PC套路,简单的来讲就是应用程序认为他独占所有资源,安卓系统的理念是应用程序越少在乎OS的存在越好。应用程序的生存周期是,除非用户让它停止,它才停止。
而iOS则更像是一个应用程序的容 ...
你露馅了老大:D
你根本不懂安卓的内存管理机制。自己翻翻技术文档吧,看你还懂javabean的份上,说出这番毫无根据的言论我真为你的码农生涯抓鸡啊

TOP

引用:
原帖由 ffcactus 于 2012-9-11 10:33 发表


您开发过安卓应用吗? 这是我同行给我们普及的。
同行:D ,这是我朋友系列么?

在下就是做移动开发的,产品有两位数

TOP

ffcactus 给我说说安卓四个推送机制是什么,各自优点和缺陷是什么

TOP

引用:
原帖由 ffcactus 于 2012-9-11 10:46 发表

好想我说反了, 安卓反倒是走的container 那一套。
赶紧回到你j2ee的座位上,别拿PC的机制跟安卓的机制混为一谈,container ,搞笑吧,服务器怎么去找手机ip。手机ip随着接入基站改变的。
你连container估计都没搞清楚呢

TOP

引用:
原帖由 ffcactus 于 2012-9-11 10:51 发表


我怎么知道?我又不是开发安卓的。
那你就没资格说我一派胡言

TOP

我来说一下安卓的内存管理机制吧。安卓设计之初CPU性能、ROM读写性能低等问题,作为一个开放性系统,为了匹配市场上更多的硬件,采用了内存预读的方式解决CPU性能不足的问题。具体做法就是根据用户行为将可能会用的软件尽量预读进内存里面,当切换到已经预读的程序时,CPU就无需加载软件直接开始运算软件。这移动设备上是绝对不用使用预读这种愚蠢的机制的,没有那么多电给你耗。而且你自己说了CPU性能低、ROM读写能力低,那还预读干嘛? 最合理的算法当然是保留最新运行的程序,释放最早运行的程序。 当运行需要内存的时候,将会释放掉挂起的进程、部分预读的程序以提供足够的运行空间。

--不预读的话当你需要用的时候再才慢慢预读,会更久。RAM空闲和填满耗电差距不大


这就是为什么安卓用户的内存永远都塞得满满的原因。要严重是不是这个原因很简单,重新开机,然后运行一个程序, 你看看有没有预读的功能或服务就好了。你要不要验证下?如果你用高端机可能感觉不到,但是如果你用512M或者更低的内存的时候这种机制你就会感觉很明显。比如你在玩了大型软件后退会桌面,你会发现桌面的插件在重新启动。没错,你桌面的插件被释放了。重新启动的速度很抓狂吧,那是因为CPU太慢了。安卓用户不是内存不够,而是CPU太慢,如果你的CPU足够快,那么就是256M的内存也能爽到飞起,当然你的手机是不会用i7或者至强处理器的。最一派胡言的地方就在于此。CPU太慢?以CPU的频率刷新整个1GB内存需要多少时间? 不到1秒。 真正的瓶颈是手机的持久存储器。这是任何一个有些许硬件常识的人都应该知道的。

--加载资源考虑过没?查找资源,再从ROM读取进来的时间考虑过没?本来就资源有限,任意CPU开销都会很容易导致应用卡顿。这是手机,不是台式机。

至于这个机制为什么会导致运行大型程序会卡,平时使用也卡。
第一,我没有读过预读内存的逻辑,不负责地估计是:当你链接网络时,系统认为你会使用互联网相关的程序,然后加载所有带有互联网接入权限的软件……OK,在国内,基本上90%的程序都会有。
第二,运行所需的内存,是刚好分够给你的,比如你的程序需要50M,就给你分51M,运行所需内存突然要求增加,CPU就要重新释放和申请新的内存,这是一个不小的开销。释放和申请内存几乎不要时间。

--同上,没有考虑过加载资源

第三,系统释放的进程,可能正是你需要的,就像你运行大型软件,然后随时切回桌面。系统不认为桌面插件是不可释放的,然后咔嚓了,切回桌面的时候就得重新载入。系统怎么可能会释放桌面管理进程?哪个傻逼系统会这么设计?

--你自己用过没?找台256内存的跑个大型应用,切回桌面。一开始是只有壁纸,一段时间后按钮才出来。

弱爆了

TOP

发新话题
     
官方公众号及微博