首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android架构纵横谈之——软件自愈能力 (二)

2012-07-04 
Android架构纵横谈之——软件自愈能力 (2)by 宋宝华上回书我们说到Android里的init会监测init.rc中启动的ser

Android架构纵横谈之——软件自愈能力 (2)

                                                by 宋宝华

上回书我们说到Android里的init会监测init.rc中启动的service并根据情况重启之。今回书我们说Android中生死与共的Zygote和SystemServer。

第二只狗:忠犬八公

方今之世,正道不昌,邪魔丛生。撞伤不如撞死,因此各种难以理解之行为层出不穷,撞后用天涯明月刀杀人者有之,撞后人民女教师裸体阻救援者有之,这是怎样地一种非人间的浓厚的悲凉?对人生命权的尊重实为最基础之人性,残杀同类,见死阻救,实为丧失最基础之人性。热泪在心中,汇成河流。我们曾经以无限崇高的主义,无比正义的革命的名义杀人,肆意践踏人最基本的尊严,而悲剧的后果是,热血已成过去,激情亦然淡去,主义仍如浩渺 ,人性却遭沦丧。

人性已泯,狗性依然,如太平洋的风。本回书,我们说第二只狗,忠犬八公。1925年5月,八公的主人上野因病猝然去世,然而八公犬并不懂人事,依然每天到涩谷站去等候主人的归来。直到最后死去。1935年3月,八公因患丝虫性象皮病而死亡。十年生死两茫茫,不思量,自难忘。所谓爱者,大抵如此。在这个小三流行的世界,什么样的人还珍视婚姻的责任和当初的誓言?

Android架构纵横谈之——软件自愈能力 (二)

本回书我们要谈的是Zygote和SystemServer的生死与共,执子之手,与子偕老,Zygote和SystemServer用全部的生命来演绎这段忠贞的爱情,当死去时,与子成蝶,如果有来生,我们还在一起。

Zygote是Android系统的核心,受精卵的意思,Android framework大家族的祖先。她的妈贵姓呢?就是上回书里说的init。Zygote是Java世界的生产者,Android的女娲,她通过runSelectLoopMode()不断监听来自应用程序的透过ActivityManagerService的启动需求,并fork出相应的进程。而SystemServer是Android世界里的核心价值,SurfaceFlinger以及Java服务如PowerManagerService、 WindowManagerService、ActivityManagerService等都是他启动的,并成为他的一部分,他带的嗷嗷叫的兵,共同运行于SystemServer进程空间。可以说,SystemServer的崩溃基本意味着Android的Framework的崩溃。SystemServer是Android里兵马大元帅。基本上,在Android的世界里,能与SystemServer和Zygote彼此相配的,也就只有对方。那么SystemServer百战而死后,Zygote应该是万念俱灰,其实真地没有活着的必要。

在Android中,SystemServer是由 Zygote分叉出来的,相关代码位于dalvik/vm/native/dalvik_system_Zygote.c中:


由于几乎所有的Java应用都依赖于SystemServer中的service,如果SystemServer崩溃,Zygote不死并且不导致整个Java世界死亡,实际上系统没有任何办法把状态恢复到SystemServer崩溃之前的状态 ,那么各个apk所看到的SystemServer中各个service的状态也无法恢复,所以整个Java世界死亡并重启就成为唯一的选择。

本回书就说到这里,下回书我们说SystemServer的看门狗。欲知后事如何,请听下回分解。

谨以本回,献给全天下的有情人,愿有情人终成眷属。对金钱与物质的无限度的追求,让我们迷失了方向,而真正的幸福,是与你的爱人平凡的终生相守。

 

相思似海深,旧事如天远。
泪滴千千万万行,更使人、愁肠断。
要见无因见,拚了终难拚。
若是前生未有缘,待重结、来生愿。

——宋宝华

2楼calerysq昨天 18:32
zygote与SystemServer的生死与共着实令人感动,但有一点不太明白,其实zygote孵化出的还有其他一些进程,如一个普通apk进程,SystemServer只是他的明门正妻而已。zygote自己为SystemServer殉情,我想那些“小三”进程也没法活了,真够残忍啊,他为什么不在SystemServer死亡时保留自己的性命,采用魔法术将她起死回生呢?不知道android设计者是怎么想的,宋老师觉得呢?
Re: 21cnbao40分钟前
回复calerysqn这个问题问地好啊,由于几乎所有的Java应用都依赖于SystemServer中的service,如果SystemServer崩溃,Zygote不死并且不导致整个Java世界死亡,实际上系统没有任何办法把状态恢复到SystemServer崩溃之前的状态 ,那么各个apk所看到的SystemServer状态也无法恢复,所以整个Java世界死亡并重启就成为唯一的选择。
1楼dhcai昨天 17:11
希望楼主多出一些生动形象的android博文 一直挺你

热点排行