设为首页 加入收藏

TOP

Android Service分析
2014-11-24 12:21:30 来源: 作者: 【 】 浏览:0
Tags:Android Service分析

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 proc(ProcessState::self());


addService(String16("xxx0"), new xxx0Service());


addService(String16("xxx1"), new xxx1Service());



ProcessState::self()->startThreadPool();


IPCThreadState::self()->joinThreadPool();//闭合循环框架


}




Native Service是在系统Init阶段通过Init.rc脚本建立的服务。


首先来看看一个例子mediaserver@main_mediaserver.cpp的建立过程。


int main(int argc, char** argv)


{


sp proc(ProcessState::self());


sp 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 proc(ProcessState::self());


sp sm = defaultServiceManager();


defaultServiceManager()->addService(String16("media.audio_flinger"), new AudioFlinger());



ProcessState::self()->startThreadPool();


IPCThreadState::self()->joinThreadPool();


}


1)服务进程建立了ProcessState对象,并将给对象登记在进程的上下文中。


2)建立一个新AudioFlinger对象,并将对象登记Service Manager Service中。


3)开始就收请求,处理请求,应答这个循环闭合框架。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 启动过程详解 下一篇Android IPC框架分析 Binder,Ser..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)