Chinaunix首页 | 论坛 | 博客
  • 博客访问: 612202
  • 博文数量: 192
  • 博客积分: 3780
  • 博客等级: 中校
  • 技术积分: 1487
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-26 10:11
文章存档

2012年(6)

2011年(160)

2010年(26)

分类: 嵌入式

2011-06-30 17:22:02

一、 Android Service 介绍

Android 的 Service 分为两种: Android Service 和 Native Service 。

Android Service :又称为 Java Service ,是实现在框架层( framework )里的 Server 。 Android Service 以 Java 编写。

Native Service :又称为 System Service ,是实现在 Runtime 层里的 Server 。

以 MediaPlayer 为例,从下图我们可以得出两种服务的关系:

 

 

接下来要讨论的 Service 是 Native Service ,与应用程序设计上所讨论的 Service ( android.app.Service )不同。

 

二、为什么要写底层的核心服务呢?

( 1 ) 因为底层核心服务是 Android 框架里最接近 Linux/Driver 的部分。为了充分发挥硬件设备的差异化特性,核心服务是让上层 Java 应用程序来使用 Driver/HW Device 特色的重要管道。

( 2 ) 在开机过程中,就可以启动核心服务 ( 例如汉字输入法服务等 ) ,让众多应用程序来共享之。

( 3 ) 由于共享,所以能有效降低 Java 应用程序的大小 (Size) 。

 

三、如何实现一个核心服务呢 ?

要点如下:

( 1 )核心服务通常在独立的进程 (Process) 里执行。

( 2 )必须提供 IBinder 接口,让应用程序可以进行跨进程的绑定 (Binding) 和呼叫。

( 3 )因为共享,所以必须确保多线裎安全 (Thread-safe) 。

( 4 )以 C++ 类别定义,诞生其对象,透过 SM 之协助,将该对象参考值传给 IServiceManager::addService() 函数,就加入到 Binder Driver 里了。

( 5 )应用程序可透过 SM 之协助而远距绑定该核心服务,此时 SM 会回传 IBinder 接口给应用程序。

( 6 )应用程序可透过 IBinder::transact() 函数来与核心服务互传数据。

阅读(1971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~