Android中深入研究Service

移动开发 Android
关于Service,不管是Windows还是linux系统,相信大家应该遇到过很多自己解决不了的问题吧,那么本文来讲述一下Android手机系统中的Service .

1 Service本质结构

我们还是从Service的根本意义分析入手,服务的本质就是响应客户端请求。要提供服务,就必须建立接收请求,处理请求,应答客服端的框架。我想在Android Service设计者也会无时不刻把这个服务本质框图挂在脑海中。从程序的角度,服务一定要存在一个闭合循环框架和请求处理框架。

分析清楚服务框就必须弄清楚以下的机制及其构成。

(1)闭合循环结构放置在哪里?

(2)处理请求是如何分发和管理?

(3)处理框架是如何建立的?

(4)概念框架是如何建立的?

2 Service基本框架分析

Android设计中,Native Service和Android Service采用了同一个闭合循环框架。这个闭合循环框架放置在Native的C++空间中。

在服务框架中,ProcessState是公用的部分,这个公用部分最主要的框架就是闭合循环框架和接收到从Binder来的请求后的处理框架。我们将服务框架用ProcessSate来表示,简言之:

(1) addservice

(2) 建立闭合循环处理框架。

java代码:

  1. int main(int argc, char** argv){  
  2. sp<ProcessState> proc(ProcessState::self());  
  3. addService(String16("xxx0"), new xxx0Service());  
  4. addService(String16("xxx1"), new xxx1Service());  
  5. ProcessState::self()->startThreadPool();  
  6. IPCThreadState::self()->joinThreadPool();//闭合循环框架  

2.1 Native Service

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

java代码:

  1. int main(int argc, char** argv){  
  2. sp<ProcessState> proc(ProcessState::self());  
  3. sp<IServiceManager> sm = defaultServiceManager();  
  4. LOGI("ServiceManager: %p", sm.get());  
  5. AudioFlinger::instantiate();  
  6. MediaPlayerService::instantiate();  
  7. CameraService::instantiate();  
  8. AudioPolicyService::instantiate();  
  9. ProcessState::self()->startThreadPool();  
  10. IPCThreadState::self()->joinThreadPool();  

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

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

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

2.2 Android Service

Androids service是系统二阶段(Init2)初始化时建立的服务。

在SystemServer.java中看不到循环结构,只是可以看到建立了init2的实现函数,建立了一大堆服务,并AddService到service Manager。


Init1()是在Native空间实现的(com_andoird_server_systemServer.cpp)。我们一看这个函数就知道了,原来这个闭合循环处理框架在这里:

init1->system_init() @System_init.cpp

在system_init()我们看到了这个久违的循环闭合管理框架。

java代码:

  1. {  
  2. Call "com/android/server/SystemServer", "init2"  
  3. ProcessState::self()->startThreadPool();  
  4. IPCThreadState::self()->joinThreadPool();  

【编辑推荐】

Service Broker基础应用(上)

Service Broker基础应用(下)

浅述远程Service Broker的实现

Android开发之旅:Android架构

Android应用程序开发环境的搭建

责任编辑:zhaolei 来源: 移动开发者
相关推荐

2011-12-15 10:43:20

JavaNIO

2022-05-11 09:03:05

CSS容器文本换行

2013-01-07 13:38:56

Android开发布局长度单位

2010-11-18 17:24:27

Oracle旋转ins

2018-12-24 15:00:58

混合云多云云采用

2010-11-23 16:35:59

MySQL删除多表数据

2010-05-31 17:45:50

MySQL行锁

2010-11-26 11:57:35

MySQL结果字符串

2017-06-06 11:29:23

Java异常研究与分析

2016-01-12 18:04:55

Java异常研究

2009-10-20 10:17:50

综合布线系统验收

2010-06-21 13:07:14

2022-04-19 08:28:34

main函数

2010-05-19 14:45:46

2009-11-11 13:49:02

路由器技术

2009-12-08 18:45:17

PHP检查函数可用

2021-05-25 09:00:00

Kubernetes容器集群

2023-11-03 08:25:28

数据结构Java

2012-10-18 09:34:57

CSSdisplayDIV

2009-08-25 16:11:12

Repeater控件
点赞
收藏

51CTO技术栈公众号