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


发新话题
打印

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

我估计每个应用程序都像 Enterprise JavaBean 一样, 有一个生存周期的接口,开发者实现这个接口, 系统调用这个接口来管理每个应用程序, 这样一来系统就可以保证运行环境良好。 这个接口应当包含了应用程序的“暂停,休眠,终止”等不同等级的调用。
至于你说为什么有的程序有特权,这可能是苹果提供授权。


TOP

什么情况, 像周大这样的人难道还是IT人士? 不可能吧。



TOP

引用:
原帖由 c月光咖啡 于 2012-9-11 09:42 发表
安卓为什么要那么大内存都不流畅,苹果那么点内存却如此流畅。其实这是源于两种系统内存管理机制的差异造成的。

我来说一下安卓的内存管理机制吧。安卓设计之初CPU性能、ROM读写性能低等问题,作为一个开放性系统 ...
一派胡言。


TOP

引用:
原帖由 c月光咖啡 于 2012-9-11 10:12 发表

求巨巨指导,莫非你是IT大牛,不好意思让你见笑了
安卓走的是那一套老的PC套路,简单的来讲就是应用程序认为他独占所有资源,安卓系统的理念是应用程序越少在乎OS的存在越好。应用程序的生存周期是,除非用户让它停止,它才停止。
而iOS则更像是一个应用程序的容器,应用程序必须明确的知道它是生存在这个容器中的,容器很有可能随时通知其停止运行、后台运行、休眠、终止等。
结果就是安卓的应用程序设计起来更简单,但是难以管理。iOS的应用程序设计相对麻烦,但是系统能更有效的控制程序的运行。
硬件充分强大的话, 自然安卓占优势。目前的移动设备来说还是iOS的机制给用户的体验更好。

TOP

引用:
原帖由 c月光咖啡 于 2012-9-11 10:30 发表

你露馅了老大:D
你根本不懂安卓的内存管理机制。自己翻翻技术文档吧,看你还懂javabean的份上,说出这番毫无根据的言论我真为你的码农生涯抓鸡啊
您开发过安卓应用吗? 这是我同行给我们普及的。

TOP

引用:
原帖由 c月光咖啡 于 2012-9-11 10:43 发表

同行:D ,这是我朋友系列么?

在下就是做移动开发的,产品有两位数
好想我说反了, 安卓反倒是走的container 那一套。

TOP

引用:
原帖由 c月光咖啡 于 2012-9-11 10:44 发表
ffcactus 给我说说安卓四个推送机制是什么,各自优点和缺陷是什么
我怎么知道?我又不是开发安卓的。

TOP

引用:
原帖由 c月光咖啡 于 2012-9-11 10:53 发表

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

这就是为什么安卓用户的内存永远都塞得满满的原因。要严重是不是这个原因很简单,重新开机,然后运行一个程序, 你看看有没有预读的功能或服务就好了。你要不要验证下?如果你用高端机可能感觉不到,但是如果你用512M或者更低的内存的时候这种机制你就会感觉很明显。比如你在玩了大型软件后退会桌面,你会发现桌面的插件在重新启动。没错,你桌面的插件被释放了。重新启动的速度很抓狂吧,那是因为CPU太慢了。安卓用户不是内存不够,而是CPU太慢,如果你的CPU足够快,那么就是256M的内存也能爽到飞起,当然你的手机是不会用i7或者至强处理器的。最一派胡言的地方就在于此。CPU太慢?以CPU的频率刷新整个1GB内存需要多少时间? 不到1秒。 真正的瓶颈是手机的持久存储器。这是任何一个有些许硬件常识的人都应该知道的。
至于这个机制为什么会导致运行大型程序会卡,平时使用也卡。
第一,我没有读过预读内存的逻辑,不负责地估计是:当你链接网络时,系统认为你会使用互联网相关的程序,然后加载所有带有互联网接入权限的软件……OK,在国内,基本上90%的程序都会有。
第二,运行所需的内存,是刚好分够给你的,比如你的程序需要50M,就给你分51M,运行所需内存突然要求增加,CPU就要重新释放和申请新的内存,这是一个不小的开销。释放和申请内存几乎不要时间。
第三,系统释放的进程,可能正是你需要的,就像你运行大型软件,然后随时切回桌面。系统不认为桌面插件是不可释放的,然后咔嚓了,切回桌面的时候就得重新载入。系统怎么可能会释放桌面管理进程?哪个傻逼系统会这么设计?

TOP

何况这推送与卡机有什么关系? 混淆视听。

TOP

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

--不预读的话当你需要用的时候再才慢慢预读,会更久。RAM空闲和填满耗电差距不大
你预读时CPU不耗电, 持久存储器不耗电?
你自己说“CPU就要重新释放和申请新的内存,这是一个不小的开销”,那预读通常要多读几个,而且不可避免的会出现误读,当用户真正开启应用程序的时候, 系统要释放预读错的应用程序,这申请释放内存岂不是完全可以抵消你预读的优势?  就连PC上都没有采用预读的机制,手机上还采用? 不过我也说了, 你自己检验一下你没开启的服务系统会不会自动帮你打开就好了。 预读比cache的效果上差远了。由于预读必然要占用cache的空间, 所以不会出现预读。


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

--加载资源考虑过没?查找资源,再从ROM读取进来的时间考虑过没?本来就资源有限,任意CPU开销都会很容易导致应用卡顿。这是手机,不是台式机。
估计你连文件系统怎么运行的都不明白吧, 你的程序从来都不会与持久存储器直接打交道,如果它要查找一个文件,它浏览的不是去读持久存储器上的文件目录,而是这个目录在RAM中的副本。如果他要读一个文件,它也不会去读持久存储器上的数据, 而是先将这些数据读到RAM中, 然后再读。应用程序的卡顿几乎都是发生在IO瓶颈上,发生在CPU上几乎不存在。你就算评估CPU测算圆周率的时候,运行其他应用程序一样不怎么卡。再说一次,瓶颈永远都是在IO上, 除非你用的是火星技术。

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

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

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

--你自己用过没?找台256内存的跑个大型应用,切回桌面。一开始是只有壁纸,一段时间后按钮才出来。
那是因为桌面进程中加载桌面上的文件以及快捷方式。这是在与你关闭的大型应用中竞争IO资源, 不是竞争CPU和RAM资源,懂吗?

弱爆了
弱爆了

TOP

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