Android启动后加载的两类service
转载自:http://blog.csdn.net/ccjhdopc/article/details/61422157
Android启动之后,会加载两类service
服务分为2种:Native Service、AndroidService。
Native Service:是在系统init阶段通过init.rc脚本建立的服务,完全在C++空间完成的服务。
比如: SensorService,
/system/bin/audioserver进程中:(main_audioserver.cpp) MediaLogService, AudioFlinger, AudioPolicyService, RadioService, SoundTriggerHwService,
/system/bin/cameraserver进程中:(main_cameraserver.cpp) CameraService,
/system/bin/mediacodec 进程中:(main_codecservice.cpp) MediaCodecService,
/system/bin/mediadrmserver进程中:(main_mediadrmserver.cpp) MediaDrmService
/system/bin/drmserver进程中:(main_drmserver.cpp) DrmManagerService
/system/bin/mediaserver (main_mediaserver.cpp) MediaPlayerService, ResourceManagerService, /system/bin/mediaextractor (main_extractorservice.cpp) MediaExtractorService
/system/bin/surfaceflinger (main_surfaceflinger.cpp) SurfaceFlinger等
/system/bin/inputflinger |
备注:
Android7.0, 把一些service从MediaServer中分离出来了,比如audio, camera,等 frameworks\av\media\audioserver\audioserver.rc frameworks\av\media\audioserver\main_audioserver.cpp |
顺便说说Android N和Android M版本之间多媒体服务的差别
在Android N中,Google将媒体服务拆分成了不同的片块,每个都只能访问一个特定的子系统。
比如,音频服务(AudioServer)只可访问所有音频内容,而摄像头服务(CameraServer)只能调用摄像头。
此外,Android N中还有拆分出来的提取服务(ExtractorService)、解码器服务(MediaCodecService)、DRM服务(MediaDrmService)
Androids service:是系统二阶段(init2)初始化时建立的服务,是指在JVM空间完成的服务,虽然也要使用Navite上的框架,但是服务主体存在于Android空间,所有的Androidsservice都运行在一个进程中:systemsever进程。
ActivityManagerService |
PackageManagerService |
WindowManagerService |
PowerManagerService |
BatteryService |
BatteryStatsService |
DreamManagerService |
DropBoxManagerService |
SamplingProfilerService |
UsageStatsService |
DiskStatsService |
DeviceStorageMonitorService |
SchedulingPolicyService |
AlarmManagerService |
DeviceIdleController |
ThermalObserver |
JobSchedulerService |
AccessibilityManagerService |
DisplayManagerService |
LightsService |
GraphicsStatsService |
StatusBarManagerService |
NotificationManagerService |
WallpaperManagerService |
UiModeManagerService |
AppWidgetService |
LauncherAppsService |
TextServicesManagerService |
ContentService |
LockSettingsService |
InputMethodManagerService |
InputManagerService |
MountService |
FingerprintService |
TvInputManagerService |
DockObserver |
NetworkManagementService |
NetworkScoreService |
NetworkStatsService |
NetworkPolicyManagerService |
ConnectivityService |
BluetoothService |
WifiP2pService |
WifiService |
WifiScanningService |
AudioService |
MediaRouterService |
VoiceInteractionManagerService |
MediaProjectionManagerService |
MediaSessionService |
|
DevicePolicyManagerService |
PrintManagerService |
BackupManagerService |
UserManagerService |
AccountManagerService |
TrustManagerService |
SensorService |
LocationManagerService |
VibratorService |
CountryDetectorService |
GestureLauncherService |
PersistentDataBlockService |
EthernetService |
WebViewUpdateService |
ClipboardService |
TelephonyRegistry |
TelecomLoaderService |
NsdService |
UpdateLockService |
SerialService |
SearchManagerService |
CommonTimeManagementService |
AssetAtlasService |
ConsumerIrService |
MidiServiceCameraService |
TwilightService |
RestrictionsManagerService |
MmsServiceBroker |
RttService |
UsbService |
AudioFlinger为例:
对于用户实现:XXX = AudioFlinger IAudioFlinger:是一个接口类,继承IInterface,定义服务的方法,即纯虚函数method_1()等,不能被实例化 BpAudioFlinger:是一个实现类,实现了IAudioFlinger中的纯虚函数,因为不是接口类,这个实现类不需要在接口中体现(即不需要在接口的头文件中体现,如:IMediaPlayer.h),它封装了IAudioFlinger的操作和BpBinder的操作; BnAudioFlinger:仍是一个接口类,未实现IAudioFlinger中的纯虚函数,不能被实例化,需要一个真正工作的类来继承、实现它,这个类才是真正执行具体功能的类。BnAudioFlinger仅实现了虚函数onTransact()(在BBinder::transact()被调用)。 AudioFlinger:实现BnAudioFlinger,会有一个AudioFlinger::instantiate()函数来注册服务。 AudioFlinger::instantiate() 在一个进程(AudioServer)中进行调用,AudioServer由init进程调用
对于C++ Binder框架: IInterface:主要是定义了asBinder()、纯虚函数onAsBinder(),asBinder()直接调用onAsBinder(),onAsBinder()分别在BnInterface、BpInterface中进行了实现,用于获取BnInterface、BpBinder的地址,即IInterface的作用是通过接口获取对应的Binder对象的本地地址/代理BpBinder的地址。 BpInterface< IAudioFlinger >:是一个接口,一个模板类,是一个粘合类,即继承BpInterface< IAudioFlinger >便等同于同时继承IAudioFlinger和BpRefBase。 BnInterface< IAudioFlinger >:是一个接口,一个模板类,是一个粘合类 对于Binder核心库: IBinder:是一个接口,被BpBinder、Bbinder继承 BpBinder:客户端,内部有一个成员mHandle记录了远程服务对象的handle BpRefBase:客户端,内部有一个成员指向BpBinder,采用的是Bridge设计模式,实际是是通过BpBinder来完成通信 Bbinder:服务端 ProcessState、IPCThreadState是进程、线程相关,是对Binder驱动的封装 |
posted on 2017-08-02 11:27 feifeiyuan 阅读(4125) 评论(0) 编辑 收藏 举报