轉載自: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驅動的封裝 |
