写点什么

Android 如何从应用深入到 Framework (一),2018 移动应用开发前景

  • 2021 年 11 月 08 日
  • 本文字数:1218 字

    阅读完需:约 4 分钟

熟悉我的人都知道,我特喜欢把这个放在第一位,原因很简单,它确实支撑了我随后的所有知识根基,让我能够从容不迫的,将一个个系统拆解出来。


我们就拿安卓来讲,启动过程


Android 启动过程框架


跟 linux 如出一辙,所以很容易迁移过来,同时,差异化的 init 进程,完成初始任务,创建安卓世界的孵化器,既然这里要进入安卓世界,而安卓世界的基础语言是 java,那么就需要一个 Java 虚拟机,于是孵化器就要构造一个虚拟机,用来解析执行 Java 编译出来的字节流。而孵化器本身是由 c cpp 语言实现,于是 Java 虚拟机就是由 c cpp 语言写出来的,linux 操作系统也是 c(还有一些汇编)写出来的,于是 Java 虚拟机运行的 Java 语言,就需要跟 c cpp 打交道,于是就有了 JNI。


孵化器做了几件事情:


1 完成 Java 虚拟机的构造


2 完成 JNI 对接 Java 与 c 的桥梁


3 加载公共的共享库


4 等待别人给它发消息,创建新进程


在这期间,孵化器要做一件事情,便是创建 system_server ,这个进程要做什么呢?我们创建了一个可以运行 Java 的虚拟机,这时我们就要提供一堆系统接口,用来协助应用开发,比如请求网络啦,比如创建界面啦,比如定位啦,获取存储卡啦,等等支持,方便用户开发功能。一个平台的好坏,往往取决于它的功能是否强大,是否有丰富的技术文档,以及开发调试工具。


所以就有了一堆线程,比如 AMS,WMS,PMS,BT,WIFI,这些都可以在/proc/{ system_server_pid}/ tast 找到记录。


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


有了这些线程,那么我们就可以轻松的去实现很多功能啦。这时我们就要配套的开发工具,比如 AS 编辑器,可以编辑,编译出来 APK,安装到手机运行。


关于操作系统,需要掌握的知识点为:


1 进程,线程概念


2 互斥,死锁机制与原理,如何避免死锁


3 内存管理机制,虚拟内存


4 静态库与动态库的区别


5 进程之间的内存屏障,如何通信(IPC)


6binder 的通信优势


这里先想到这些,注意不是要完成懂所有机制,要的是整体理解即可。如下问题,请思考下,看是否能够答上来。


1 如果我写了一个应用,名字叫做,com.codegg.home 在主 activity 里面,加载一个布局,layout_main. xml,布局里面写入了一个 TextView,那么我想调试这个 TextView,要在 com.codegg.home 这个进程下断点,还是在 system_server 进程下断点呢?如果是想调试 ActivityThread. java 的话?应该在哪个进程下断点呢?


以上答案,都是 com.codegg.home 下断点,原因是这两个当前的运行进程,都是在 com.codegg.home 里,所以要调试的话,要在 com.codegg.home 进程下断点。


那么我们再来思考下,我现在要去追应用的启动过程,start Activity 的流程,要在哪个地方下断点呢?


我们知道这个流程,最终核心的都在 Activity manager server 里面,而它是在 system server 进程里面,以一个线程的状态存在,于是我们要调试,就要在 system server 上面下断点了。


如果你对这几个问题,没有疑惑,恭喜你,进程和线程,你已经有了概念了。


------------未完待续----------

评论

发布
暂无评论
Android 如何从应用深入到Framework (一),2018移动应用开发前景