在系统启动的时候,会做一系列初始化的工作包括service的创建。所以要了解系统中有多少种类的服务,每一类的服务都是如何实现的,这是一个最好的入口。这就直接从代码入手进行解析:
转载请注明(http://ishelf.iteye.com/blog/1027886)
首先在SystemServer的run方法中,有如下代码
try {
Slog.i(TAG, "Input Method Service");
imm = new InputMethodManagerService(context, statusBar);
ServiceManager.addService(Context.INPUT_METHOD_SERVICE, imm);
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Input Manager Service", e);
}
try {
Slog.i(TAG, "NetStat Service");
ServiceManager.addService("netstat", new NetStatService(context));
} catch (Throwable e) {
Slog.e(TAG, "Failure starting NetStat Service", e);
}
try {
Slog.i(TAG, "NetworkManagement Service");
ServiceManager.addService(
Context.NETWORKMANAGEMENT_SERVICE, new NetworkManagementService(context));
} catch (Throwable e) {
Slog.e(TAG, "Failure starting NetworkManagement Service", e);
}
如上所示,这段代码是在启动bootanim(setprop("ctl.start","bootanim"))服务时通过系统命令启动的,主要功能就是启动常驻android的所有后台服务,例如T卡服务、包解析服务、wifi服务、蓝牙服务等等。在addService方法中第一个参数表示该服务的名称,第二个参数表示该服务的类(Ibinder的子类)。接下来的问题就是服务已经启动了,可是如何在其他的地方调用这些服务并作出相应的动作,例如在关机过程中要UnMount sd卡等。
这里需要使用到ServiceManager类,先给出调用代码
final IBluetooth bluetooth =
IBluetooth.Stub.asInterface(ServiceManager.checkService(
BluetoothAdapter.BLUETOOTH_SERVICE));
try {
bluetoothOff = bluetooth == null ||
bluetooth.getBluetoothState() == BluetoothAdapter.STATE_OFF;
if (!bluetoothOff) {
bluetooth.disable(false); // disable but don't persist new state
}
} catch (RemoteException ex) {
bluetoothOff = true;
}
方法checkService的参数就是addService中设置的对应service的名称,例如要获取蓝牙耳机的service,需要BluetoothA2dpService.BLUETOOTH_A2DP_SERVICE,而对应的Ibinder类则是IBluetoothA2dp。
分享到:
相关推荐
Android 系统从 SystemServer 开始的 Launcher 启动详细流程 Android 系统启动流程是一个复杂的过程,从 SystemServer 开始到 Launcher 的启动涉及到多个组件和服务的协作。本文将详细介绍 Android 系统从 ...
Android启动,第三阶段,SystemServer创建。 紧接上两篇《 Android启动-init介绍》和《Android启动-Zygote启动介绍》Linux内核启动之后,执行第一个进程 Init-->init创建Zygote-->fork出SystemServer。 这里...
通过对Zygote启动流程以及systemServer和Home Activity启动过程的详细解析,我们不仅了解了Android系统启动过程中的关键步骤和技术细节,还深入了解了ART虚拟机的工作原理。这些深入的理解对于开发者来说至关重要,...
SystemServer启动阶段思维示意图
Android zygote服务/SystemServer启动流程/Activity创建,本文档继承Android init的分析,继续往下分析Zygote进程、SystemServer进程的创建、Activity的建立
- **创建ActivityManagerService实例**:在`SystemServer`启动时,会创建`ActivityManagerService`的实例。 - **创建ActivityThread实例,获取全局Context**:`ActivityManagerService`通过调用`ActivityThread`的...
### Android系统从init进程开始到systemserver启动详细流程 #### 1. 概述 在Android系统的启动过程中,从Linux内核加载完成后,系统将执行第一个用户空间进程——`init`进程,它作为后续所有进程的父进程。`init`...
本文将详细解析`SystemServer`的启动过程,特别是它与其他普通进程的区别,以及内部是如何启动和管理各种系统服务的。 #### 二、启动过程 ##### 2.1 启动入口 `SystemServer`进程的启动是由`ZygoteInit.java`中的...
2. **Android服务启动**:SystemServer启动后,会依次启动一系列重要的Android服务,如`ActivityManagerService`、`WindowManagerService`、`PackageManagerService`等。 3. **Home应用启动**:一旦SystemServer及其...
一旦`SystemServer` 启动完成,`ActivityManagerService` 会启动默认的主屏幕应用,用户就可以开始与系统交互了。 ### 结论 通过上述分析,我们可以看出Android系统的启动流程是一个复杂而有序的过程,涉及到多个...
SystemServer由Zygote孵化,启动时会进行一系列的初始化工作,包括启动Activity Manager Service(AMS)、Window Manager Service(WMS)和Content Provider等核心服务。 AMS负责管理所有应用程序的活动堆栈,控制...
- **ActivityManagerService的启动**:SystemServer还会启动ActivityManagerService,它是负责管理应用程序活动生命周期的关键组件。 #### 六、ActivityManagerService - **职责**:ActivityManagerService负责...
在 SystemServer.java 中看不到循环结构,只是可以看到建立了 init2 的实现函数,建立了一大堆服务,并 AddService 到 service Manager。 八、小结 Android GPS 架构中的 GPS 开启与关闭需要了解普通应用程序启动 ...
1. 启动 SystemServer:使用 `SystemServer` 类启动系统服务。 2. 启动系统服务:使用 `SystemService` 类启动系统服务,例如网络服务、电话服务等。 在 StartServices 阶段,AMS 还会执行一些其他操作,例如: 1....
- 系统启动完成后,`SystemServer`会调用`ActivityManagerNative.getDefault().systemReady()`来通知`ActivityManager`,表明系统启动成功。`ActivityManager`会设置变量`mBooting`,并通知其内部的另一条线程。这...