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驅動的封裝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM