在系统启动的时候,会做一系列初始化的工作包括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创建。 紧接上两篇《 Android启动-init介绍》和《Android启动-Zygote启动介绍》Linux内核启动之后,执行第一个进程 Init-->init创建Zygote-->fork出SystemServer。 这里...
Android zygote服务/SystemServer启动流程/Activity创建,本文档继承Android init的分析,继续往下分析Zygote进程、SystemServer进程的创建、Activity的建立
android系统从systemserver开始的launcher启动详细流程.doc
介绍android系统启动第二阶段,即init进程开始到systemserver启动详细流程
zygote启动流程源码分析, 文件包含zygote systemService activityManager启动homeLauncher. 因为本地文字较长 不方便写blog发布 所以上传一下文档
介绍android系统启动第三阶段,即launcher的详细启动流程
Android系统启动流程源码分析; init进程的启动; 各个守护进程的启动; Zygote的启动; SystemServer的启动;
System Server启动
Linux内核启动之后,执行第一个进程 Init,init会启动本地服务,创建Zygote进程,并最终到达systemserver,systemserver再往上启动framework层相关服务和进程,启动launcher等完成整个开机流程。Android启动研究就从这里...
通过ServiceManager.addService启动了ConnectivityService,在android系统里面我们常见的属于Connectivity的有 wifi,mobile,bluetooth,wimax,ethernet。 <framework/base/services/java/...
Android启动模式init启动分析init脚本执行和进程守护android服务davlink启动Zygote剖析system_server启动zygote_load系统资源分析及优化开机界面分析systemserver ServiceManager packageMangerService Android...
3. Zygote-Mode,Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。随后,使用者将看到一个桌面环境(Home Screen)。桌面环境由一个名为[Launcher]的应用程序负责提供。 注:Zygote干嘛用的?...
以前知道AMS、PMS这些概念及其功能,开发的过程中也会...装载与启动Linux内核 启动Android系统 其中启动Android系统过程又有以下过程: 启动Init进程 启动Zygote 启动SystemServer 启动Launcher android启动过程图示:
15.android服务介绍与davlink启动 16.Zygote剖析与system_server启动 17.Zygote创建APP分析 18.zygote_load系统资源分析及优化 19.开机界面分析 20.systemserver服务分析 21.ServiceManager服务分析 22....
android启动流程文档,Zygote,SystemServer分析,希望对大家有帮助
2.2.3 addService实例分析 2.2.4 Java层Binder架构总结 2.3 心系两界的MessageQueue 2.3.1 MessageQueue的创建 2.3.2 提取消息 2.3.3 nativePollOnce函数分析 2.3.4 MessageQueue总结 2.4 本章小结 第3章 ...
Android启动流程分析,对于Android只是触及皮毛的我,看到: init、ServiceManger、Zygote、SystemServer这些东东,完全联系不起来,总之是支离破碎呀! 下面我来梳理梳理自己那满天飞的思绪
讲述android 开机流程 从boot rom---bootloader---init--zygote---systemserver---ams 并附上自己整理的每个流程的流程图 ,清晰熟悉android 启动流程
这篇文章,主要是对之前学习ConnectivityService的再一次回顾与加深理解,先写个草稿,后面优化。 2. 服务的启动 frameworks/base/services/java/com/android/server/SystemServer.java 在判断网络可用的情况下,...
系统启动过程图: Framework层所有的Service都是运行在SystemServer进程中;SystemServer进程是由Zygote进程创建。 SystemServer进程启动分两个过程init1创建Service和进程状态对象;init2创建Framework层的Service...