重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“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)概念框架是如何建立的?
Android设计中,Native Service和Android Service采用了同一个闭合循环框架。这个闭合循环框架放置在Native的C++空间中,,ProcessState@ProcessState.cpp 和IPCThreadState@IPCThreadState.cpp两个类完成了全部工作。
ProcessState放置在全局变量gProcess中,每个进程只有一个ProcessState对象,负责打开Binder设备驱动,建立线程池等。而IPCThreadState每个线程有一个,IPCThreadState实例登记在Linux线程程的上下文附属数据中,主要负责Binder数据读取,写入和请求处理框架。IPCThreadSate在构造的时候,获取进程的ProcessSate并记录在自己的成员变量mProcess中,通过mProcess可以获取到Binder的句柄。
既然ProcessState是Binder通讯的基础,那么Process必须在Binder通讯之前建立。客户端,服务端都必须建立。由于现在重点讨论服务端,所以重心放置在服务端。在Android体系中有c++空间的服务,JVM空间的服务,这两类服务在本质上相同的,只是形式上不同,由于他们都是建立在ProcessState这个基础上,所以在形式上不同就仅仅表现在对OnTransact的回调处理的不同。
我们直接可以看到使用sp
Android Service
建立Android Service服务system_init @System_init.cpp中我们可以看到相同的结构。有一点不同的是所有的Android Service都运行在一个进程中:systemsever进程。
ProcessSate构造的时候,使用open_binder打开/driver/binder,并将句柄记录在mDriverFD,在ProcessState中并不使用这个句柄,真正使用这个Binder设备句柄的是IPCThreadState,所有关于Binder的操作放置在IPCThreadState中:
(1)读取/写入:talkWithDriver()@IPCThreadState对ioctl(mProcess->mDriverFD, BINDER_WRITE_READ, &bwr)进行包装。
(2)请求处理:executeCommand(...)@ IPCThreadState
(3)循环结构:joinThreadPool()
joinThreadPool()
{
While(1){
talkWithDriver(...)
...
executeCommand(...)
}
}
到此,相信大家对“Android Service基本框架怎么用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!