服务分为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

 

 

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驱动的封装

 


更多相关文章

  1. Android(安卓)Service组件
  2. android 中LayoutInflater 的使用
  3. 用fiddler做代理服务器转发请求
  4. startService与bindService的区别
  5. 关于Android(安卓)SQLite3多线程并发问题
  6. Android(安卓)Camera从Camera HAL1到Camera HAL3的过渡(已更新到A
  7. Android(安卓)JNI HelloWorld实现
  8. 【Android(安卓)P】 JobScheduler服务源码解析(二) ——框架解析
  9. Android开发常用调试技术大全

随机推荐

  1. 他们只有本硕学历, 却发过了AER, JPE, QJ
  2. 气候经济学能发Nature,Science的三大热点
  3. nature首次出现经济学编辑!想发nature的学
  4. 什么时候需要标准化回归模型中的变量?
  5. 对数vs线性vs二次vs指数形式,到底选择哪种
  6. 机器学习方法出现在AER, JPE, QJE等顶刊
  7. 万字长文述"家庭经济学"进展, 诺奖得主贝
  8. 过去三十年, RCT, DID, RDD, LE, ML, DSG
  9. 空间双重差分法(spatial DID)最新实证pap
  10. 忽略交互效应后果很严重,审稿人很生气!