Skip to content

Commit c013682

Browse files
committed
学习Framework
1 parent 3006954 commit c013682

4 files changed

Lines changed: 79 additions & 13 deletions

File tree

OperatingSystem/AndroidKernal/Framework/ReadMe.md

Lines changed: 79 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,85 @@
1-
第1章 系统服务相关面试问题
2-
1+
## Andorid Framework入门
2+
#### 第1章 系统服务相关面试问题
33
本章重点讲解系统核心进程,以及一些关键的系统服务的启动原理和工作原理相关的面试内容。
4-
1 谈谈对zygote的理解
5-
Zygote的作用是什么?
6-
对于Zygote的作用实际上可以概括为以下两点:
7-
* 创建SystemServer
8-
* 孵化应用进程
9-
https://zhuanlan.zhihu.com/p/260414370
4+
##### 1:谈谈对zygote的理解
5+
Zygote的作用是什么?
6+
对于Zygote的作用实际上可以概括为以下两点:
7+
+ 创建SystemServer
8+
+ 孵化应用进程
9+
10+
![](./imgs/zygote.jpeg)
11+
12+
+ 参考[谈谈对Android中Zygote的理解](https://zhuanlan.zhihu.com/p/260414370)
1013

1114

12-
2 说说Android系统的启动
13-
3 你知道怎么添加一个系统服务吗?
14-
https://blog.csdn.net/menghaocheng/article/details/104316165
15-
4 系统服务和bind的应用服务有什么区别?
16-
https://www.jianshu.com/p/f633fda5acc6
15+
##### 2: 说说Android系统的启动
16+
Android是基于Linux系统的。但是它没有BIOS程序,取而代之的是**BootLoader(系统启动加载器)**。类似于BIOS,在系统加载前,用于初始化硬件设备,最终调用系统内核准备好环境。在Android中没有硬盘,而是ROM,类似于硬盘存放操作系统,用户程序等。
17+
18+
ROM跟硬盘一样也会划分为不同的区域,用于放置不同的程序,在Android中主要划分为以下几个区域:
19+
+ /boot: 存放引导程序,包括内核和内存操作程序
20+
+ /system:相当于电脑C盘,存放Android系统和系统应用
21+
+ /recover: 回复分区。可以进入该分区进行系统回复
22+
+ /data: 用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序
23+
+ /cache: 安卓系统缓存区,保存系统经常访问的数据和应用程序
24+
+ /misc: 杂项内容
25+
+ /sdcard: 用户自己的存储区域。存放照片视频等
26+
Android系统启动跟PC相似。当开机时,首先加载BootLoader,BootLoader会读取ROM找到系统并将内核加载进RAM中。
27+
28+
当内核启动后会初始化各种软硬件环境,加载驱动程序,挂载跟文件系统。最后阶段会启动执行第一个用户空间进程init进程。
29+
![](./imgs/startup.jpg)
30+
31+
+ 参考资料[《详解Android系统启动过程》](http://www.ay1.cc/article/18368.html)
32+
33+
##### 3 你知道怎么添加一个系统服务吗?
34+
###### 新增的服务
35+
+ 服务AIDL文件,定义服务的接口:
36+
```shell
37+
frameworks/base/core/java/android/app/IDemoManager.aidl
38+
```
39+
+ 服务管理类,提供给客户端调用,以访问服务端的接口 (即持有服务端的引用, Binder 引用)
40+
```shell
41+
frameworks/base/core/java/android/app/DemoManager.java
42+
```
43+
+ 服务实现类, 实现AIDL文件
44+
```shell
45+
frameworks/base/services/core/java/com/android/server/DemoManagerService.java
46+
```
47+
48+
###### 创建及启动服务涉及的修改
49+
+ 定义服务的标识
50+
```shell
51+
frameworks/base/core/java/android/content/Context.java
52+
```
53+
+ 创建及启动服务
54+
```shell
55+
frameworks/base/services/java/com/android/server/SystemServer.java
56+
```
57+
+ 创建服务管理类(可同时获取服务端的代理对象,由服务管理对象持有)
58+
```shell
59+
frameworks/base/core/java/android/app/SystemServiceRegistry.java
60+
```
61+
+ 参考[《Framework添加新的系统服务》](https://www.jianshu.com/p/74971ee85a8b)
62+
63+
#### 4 系统服务和bind的应用服务有什么区别?
64+
##### 启动方式
65+
+ 系统服务
66+
在SystemServer里面进行分批、分阶段启动,大部分都跑在binder线程里面。
67+
##### 注册方式
68+
+ 系统服务
69+
有系统服务才能注册在ServiceManager
70+
+ 应用服务
71+
![](./imgs/ams.png)
72+
+ 应用端会向AMS发起bindService。
73+
+ AMS会先判断这个Service是否已经注册过了,注册过就直接把之前发布的binder返回给应用;如果没有,AMS会像Service请求binder对象。(AMS请求的,属于被动注册)
74+
+ Service会相应AMS的请求,发布这个binder对象到AMS
75+
+ AMS再把这个binder对象回调给应用
76+
77+
##### 使用方式
78+
+ 系统服务
79+
通过服务名去找到对于的ServiceFetcher对象,然后先通过SM.getService拿到binder对象,然后封装了一层拿到服务的管理对象。
80+
+ 应用服务
81+
通过bindService向AMS发送绑定服务端请求,AMS通过onServiceConnected()回调把服务的binder对象返回给业务端,然后把这个对象封装成业务接口对象给业务接口调用。
82+
1783
5 ServiceManager启动和工作原理是怎样的?
1884
6 谈谈对AMS的理解
1985
第2章 应用进程相关面试问题
131 KB
Loading
161 KB
Loading
99.9 KB
Loading

0 commit comments

Comments
 (0)