Android Service分析
Android Service分析
Android体系架构中三种意义上服务:
- Native服务
- Android服务
- Init空间的服务,主要是属性设置,这个IPC是利用Socket来完成的,这个我将在另外一章来讨论。
Navite服务,实际上就是指完全在C++空间完成的服务,主要是指系统一开始初始化,通过Init.rc脚本起来的服务,例如Service Manger service,Zygote service,Media service , ril_demon service等。
Android服务是指在JVM空间完成的服务,虽然也要使用Navite上的框架,但是服务主体存在于Android空间。Android是二阶段初始(Init2)初始化时建立的服务。
我们还是从Service的根本意义分析入手,服务的本质就是响应客户端请求。要提供服务,就必须建立接收请求,处理请求,应答客服端的框架。我想在Android Service设计者也会无时不刻把这个服务本质框图挂在脑海中。从程序的角度,服务一定要存在一个闭合循环框架和请求处理框架
分析清楚服务框就必须弄清楚以下的机制及其构成。
(1)闭合循环结构放置在哪里?
(2)处理请求是如何分发和管理?
(3)处理框架是如何建立的?
(4)概念框架是如何建立的?
2 Service基本框架分析
Android设计中,Native Service和Android Service采用了同一个闭合循环框架。这个闭合循环框架放置在Native的C++空间中,,ProcessState@ProcessState.cpp 和IPCThreadState@IPCThreadState.cpp两个类完成了全部工作。
在服务框架中,ProcessState是公用的部分,这个公用部分最主要的框架就是闭合循环框架和接收到从Binder来的请求后的处理框架。我们将服务框架用ProcessSate来表示,简言之:
(1) addservice
(2) 建立闭合循环处理框架。
int main(int argc, char** argv)
{
sp<ProcessState> proc(ProcessState::self());
addService(String16("xxx0"), new xxx0Service());
addService(String16("xxx1"), new xxx1Service());
…
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();//闭合循环框架
}
2.1 Native Service
Native Service是在系统Init阶段通过Init.rc脚本建立的服务。
首先来看看一个例子mediaserver@main_mediaserver.cpp的建立过程。
int main(int argc, char** argv)
{
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
LOGI("ServiceManager: %p", sm.get());
AudioFlinger::instantiate();
MediaPlayerService::instantiate();
CameraService::instantiate();
AudioPolicyService::instantiate();
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
我们将代码向下展开了一层,更能看到事物的本质。
int main(int argc, char** argv)
{
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
defaultServiceManager()->addService(String16("media.audio_flinger"), new AudioFlinger());
…
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
(1)服务进程建立了ProcessState对象,并将给对象登记在进程的上下文中。
(2)建立一个新AudioFlinger对象,并将对象登记Service Manager Service中。
(3)开始就收请求,处理请求,应答这个循环闭合框架。
|
评论暂时关闭