android (六)、Service工作原理

android操作系统支持后台服务,android应用程序和系统中大多都可以看到服务的影子。

一、android的服务分为两大部分:android应用服务和android系统服务。

二、android应用服务分为本地服务和远程服务;

三、android系统服务分为java服务和本地服务(c++编写);

四、java服务又分为核心平台服务和硬件服务。

android应用程序中最常用的是Serice,Service本身是个抽象类并没有什么功能实现,它只是是一个运行在主线程中的一个驱壳,所以如果要使用Service做耗时操作的话还是需要配合线程使用的。

官方推荐了一个用来做耗时任务的Service,它叫IntentService ,它拥有可以做任务的独立的线程。

 

应用程序Service的添加过程大致是这样的:

1、客户端调用Context.startService()或Context.bindService ();

2、Context的实现类ContextImpl开始准备添加服务,此时ContextImpl开始呼叫ActivityManagerService请求创建Service。

3、当ActivityManagerService收到信息后,信息转由ActivityService而后到ActivityThread;

4、ActivityThread此时创建Service实例并执行onCreate,然后开始运行服务。

本地Service和Activity的运行环境并没有太大差异,在同一个线程中(一般指UI线程)。

 

应用程序中的Service分本地service和远程Service:

1、本地service即和应用程序在同一个进程中,进程id(pid)相同。

2、远程service和应用程序不在同一个进程中,进程id(pid)不同;因为不在同一进程中,那么如果要交换数据或者通信就要用到Binder进行进程间通信。有需要的话可以了解下何为进程。

大多数应用程序都是单进程的,但有的时候为了某些目的,可能会分为多个进程;比如说你不想你的应用被无故kill掉,你可能会做一个远程的service(守护进程),一直监听着应用程序进程,在发现应用进程kill掉时重启应用程序;通常两者是互相监听,互相守护。

系统服务:系统服务为操作系统提供最核心最基本的功能、服务和系统管理。

例如:ActivityMangerService、WindowManagerService、PackagerManger、Audio Flinger和Surface Flinger。

ActivityMangerService、WindowManagerService、PackagerManger在framework层,Audio Flinger和Surface Flinger在library层;

系统服务中的本地服务用c++编写,运行在library层;java服务运行在framework层。

 

 

posted @ 2016-06-23 20:26  清澈见底  阅读(469)  评论(0编辑  收藏  举报