41
回答
高手问答第 162 期 —— 深入理解 Android 内核设计思想

OSCHINA 本期高手问答(2017 年 7 月 19 日 — 7 月 25 日)我们请来了林学森@Louise 为大家解答关于 Android 系统开发方向的问题。

林学森,曾于多家跨国企业担任研发和管理工作,并已在国内外会议、杂志上发表多篇文章,获得多个发明专利。现为某世界 500 强科技公司高级专家、资深架构师。

Android 的发展如日中天,平均每天有 150 万部的 Android 设备被激活,全球有超过二十亿的设备安装 Android 操作系统。未来 Android 系统的应用绝不仅局限于手机产业,现在也已迅速扩张到相关领域,如平板电脑、车载系统等。随着 Android 平台的扩张,引发了 Android 人才荒,目前移动开发人才需求缺口将达百万,但符合条件的 Android 工程师还是少数。Android 开发工程师成为 IT 行业炙手可热的岗位之一。如果你对 Android 开发相关问题有一定的疑问,那么不要错过本期的高手问答。

为了鼓励踊跃提问,@Louise 会在问答结束后从提问者中抽取 3 名幸运会员赠予《深入理解Android内核设计思想 第2版(上下册)》一书。

购买链接:https://item.jd.com/12212640.html

样章试读:https://item.jd.com/12212640.html

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就 Android 系统开发方向的问题向林学森@Louise 提问,请直接回帖提问。

举报
局长
发帖于11个月前 41回/3K+阅
共有41个答案 最后回答: 10个月前

@天使broken @架构梦想  @暖冰 @xpbob  @久永 恭喜中奖

请在下方链接填写你们的联系方式,活动名称为“开源中国高手问答-深度理解Android”

https://www.wenjuan.com/s/eEzyYf/

--- 共有 4 条评论 ---
暖冰不好意思啊,,,这么久才看到消息,因为之前忙着毕业的事~~不知道书还能不能领呢~~ 8个月前 回复
天使broken已填 请查收 10个月前 回复
久永我查到的,这个是不是? ISBN:9787115452634 10个月前 回复
久永里面书号之类的和没有的该怎么填? 貌似都是必填的啊。 10个月前 回复

@louise你好  我最近在看安卓内核方面的资料。我有一个疑问。

在加载android的虚拟机中 会有一些 资源libary 支持 安卓的窗口然后是安卓的系统资源 加载 Window  闹钟  铃声。。。等等

然后在上层就是我们的applicaption 层 然后我们的每一个app 都是运行虚拟机中 然后虚拟机会去通知linux 的内核 会去frok一个进程来

所以我理解的是 在linux 初始 zygote加载虚拟机  这是一个特殊的进程  里面有安卓的虚拟机 和系统资源 当接受到启动app 的信号时候 会很快的通知Linux内核 去fork 一个新的进程 这个时候 其实就有2个虚拟机实例了,我们安卓的app是运行在沙盒之中的 。然后 这个fork 一个进场来分配给当前的这个app 也就是说2个虚拟机么 还是怎样的 。最好能有图说明一下 这个包含关系  万分感谢!

--- 共有 5 条评论 ---
天使broken 回复 @louise : 如何复制一个全新的和父进程没有关系得子进程呢因为5.0之后 是回收内存的时候是父进程和子进程一起kill掉的 6个月前 回复
天使broken 回复 @louise : 你好 我最近有个新的疑问: 我在研究了android的保活的时候发现 基本都是基于Android Low Memory Killer 来做的 然后我配合了linux 的原理就有一个疑问 linux 在frok 进程的时候的 只有调用的 exec 函数 虽然他们的其他都一样 但是还是属于公用的一个物理地址 只有父进程有更新的时候才会标记其更改的部分 6个月前 回复
天使broken 回复 @louise : 在最下面的底部 可以评论 增加图片。 11个月前 回复
louise当要启动一个新应用时,AMS会给zygote发消息,然后zygote fork出一个新进程,此时确实就会有两个虚拟机实例了 11个月前 回复
louise抱歉,好像评论里没法加图。简单来讲,zygote是由init进程在解析init.${ro.zygote}.rc时启动的,init的pid值是1。zygote事实上是基于/system/bin/app_process32的,后者负责android虚拟机的加载(android虚拟机从表现形式上就是一个动态链接库,如libart.so)。 11个月前 回复

@louise 您好,如果我是后台开发或前端开发或产品经理.看您写的这本书.您觉得不可错过的章节是哪些呢?您觉得这本书里面,最精彩的一章是哪里呢? 再就是 android 内核设计里面 让您 感觉非常美的 设计是哪部分?

--- 共有 1 条评论 ---
louise最精彩章节可能得由读者来评价会好一些,否则有王婆卖瓜的嫌疑:-) 每个人对美的标准会有差异,个人感觉非常美的可能是binder这一块,设计得很棒。 11个月前 回复

@louise  Android 内核开发都是大公司做的比较多,小公司如何开发内核??

--- 共有 1 条评论 ---
louise给我的感觉是,“适合自己的才是最好的”。因而不论是大公司还是小公司,首先要看产品本身的定位。比如有的Android手机厂商的主打卖点是拍照,那么他们的主要精力就会放在摄像头和图像处理优化上。小公司的资源相对有限,可以选择自己产品的潜在优势点进行重点定制开发。 11个月前 回复

@louise 我就找ANDROID FW的工作,今年很难啊,行情特差。

--- 共有 1 条评论 ---
louise每一个行业/技术都有其生命周期。Android系统也不例外,经过这几年的发展后,已经逐渐成长至“壮年”阶段了,所以目前供需关系也处于一种相对平衡的状态。 11个月前 回复

引用来自“sca7”的评论

@louise  java工程师想转行安卓工程师,林哥觉得如何?应该怎么选择?

sca你好,前几年不少Android应用/framework工程师就是java工程师转过来的,技术层面上相信假以时日不会有太大的阻碍,还得看你自己的兴趣。Android是一个非常庞大的开源系统,它的有趣之处在于可以支撑你剖析理解编译系统,虚拟机,安全机制等各方面的原理实现。因而不论你选择哪一个具体的Android职位,我都想建议你要把知识面打开,融汇贯通后形成自己的知识体系,这样一来不论是“于公于私”对你自身都是大有裨益的。

引用来自“暖冰”的评论

@louise 理解内核的设计思想对于应用开发在哪些方面有帮助呢?对应用的那些表现会有很显著的提升?

暖冰你好,如果你的目标是给用户提供最佳的体验,并支撑用户的数量级增长,那么理解内核的设计思想对于应用开发是大有裨益的。譬如理解Android系统匹配最佳资源的过程,那么你可能在为应用程序提供各类资源时会更有针对性,同时也有可能提前预估到不同设备上潜在的兼容性问题及解决对策。再比如通常用户规模达到一定量级后,应用程序就需要针对各种影响用户体验的问题进行迭代优化,那么理解和识别系统实现中的某些“瓶颈”因素就显得尤为重要了。

@louise 我是刚接触android framework的开发,由于需要将同一功能适配多款产品,直接修改框架我觉得会带来兼容性问题以及移植修改要记住的地方太多。请问有没有一个一般大厂商适配那么多机型都是用啥模式?
--- 共有 1 条评论 ---
louise定制代码解耦合确实是让各个厂商都挺头疼的一件事情。目前业界还没有非常完美的解决方案,这同时也是Google在不断收紧Android开源策略的原因之一。不过你可以尝试把修改集中放置到某个路径下,然后根据定制内容(代码,资源文件等)的不同利用Android overlay机制或者设计模式来做解耦,应该可以降低一定工作量 11个月前 回复
顶部