本例和下列Local Service Controller 的Activity代码都定义在LocalServiceActivities.Java 中,作为LocalServiceActivities 内部类实现的。 调用的Service为LocalService。

LocalService既可以做为“Started” Service,也可以做为”Bound” Service。

一个“Bound” Service 可以通过Client/Service模式提供Service。它运行应用程序组件(比如Activity)与之绑定,然后接受请求并返回响应或者提供进程间通信机制,它的生命周期通常与调用它的组件(如Activity)相同。 而对于LocalService即作为“Started” Service又作为“Bound”Service,如果LocalService已作为“Started” Service启动,中即使所有Client都断开与它的绑定,LocalService也不会停止。

如果一个Service需要作为“Bound”Service运行其它组件与之绑定,就必须实现onBind方法。这个方法返回一个IBound对象给Client。Client可以通过这个IBind对象来调用Service的方法。

Client可以通过bindService来实现与“Bound”Service的绑定,Service 与 Client 的绑定是异步实现的,因此Client 需要通过 ServiceConnection 接口来监视与Service之间的连接。 Client 调用bindService 时,bindService 立即返回,之后当Android系统为Client 和Service之间建立起链接后调用 ServiceConnection 的 onServiceConnection 来通知Client 与Service之间的链接建立成功,并给Client返回 Service 提供的IBind对象。

LocalService 只提供给同一个Application的组件使用,不提供进程间通信接口,因此只需要派生一个Binder的子类如果直接的函数调用接口。

// Class for clients to access.  Because we know// this service always runs in the same process as//its clients, we don't need to deal with IPC.
public class LocalBinder extends Binder {LocalService getService() {return LocalService.this;}
}

LocalBinder只提供了一个方法getService ,返回LocalService 对象自身。

LocalService的 onBind方法定义:

@Override
public IBinder onBind(Intent intent) {return mBinder;
}// This is the object that receives interactions from clients.  See
// RemoteService for a more complete example.
private final IBinder mBinder = new LocalBinder();

onBind的返回值为mBinder 为 LocalBinder类对象。它定义了一个方法getService。

再来看看Client类 LocalServiceActivities.Binding 的实现:

private LocalService mBoundService;private ServiceConnection mConnection = new ServiceConnection() {public void onServiceConnected(ComponentName className, IBinder service) {// This is called when the connection with the service has been// established, giving us the service object we can use to// interact with the service.  Because we have bound to a explicit// service that we know is running in our own process, we can// cast its IBinder to a concrete class and directly access it.mBoundService = ((LocalService.LocalBinder)service).getService();// Tell the user about this for our demo.Toast.makeText(Binding.this, R.string.local_service_connected,Toast.LENGTH_SHORT).show();}public void onServiceDisconnected(ComponentName className) {// This is called when the connection with the service has been// unexpectedly disconnected -- that is, its process crashed.// Because it is running in our same process, we should never// see this happen.mBoundService = null;Toast.makeText(Binding.this, R.string.local_service_disconnected,Toast.LENGTH_SHORT).show();}
};

mConnection定义了ServiceConnection接口,onServiceConnected ,onServiceDisconnected分别在Service与Client 之间建立链接和断开链接时调用。其中IBinder service 就是 Service 的onBind的返回对象。 这里将其通过类型转换为LocalService也就是mBoundService。

Client 通过调用bindService建立与Service之间的绑定:

bindService(new Intent(Binding.this,LocalService.class), mConnection, Context.BIND_AUTO_CREATE);

如果需要断开与Service之间的绑定,则调用unbindService.

unbindService(mConnection);

如果你熟悉Socket编程, Client 绑定”Bound”Service 的方法和使用Socket通信非常类似。

Android ApiDemos示例解析(39):App-Service-Local Service Binding相关推荐

  1. Android ApiDemos示例解析(95):Views-Animation-3D Transition

    Android中的Animation支持无处不在,不同Activity切换,不同View之间切换,显示列表,显示表格都可以使用动画效果.前面例子Android ApiDemos示例解析(3): App ...

  2. Android ApiDemos示例解析(40):App-Service-Local Service Controller

    Local Service Controller 是将LocalService当作"Started"Service来使用,相对于"Bound" Service ...

  3. Windows内置系统账户Local system/Network service/Local Service

     内置系统账户:Local system/Network service/Local Service 区别 [ LocalSystem   账户] LocalSystem是预设的拥有本机所有权限的本地 ...

  4. 内置系统账户:Local system/Network service/Local Service 区别

    参考文献: http://www.cnblogs.com/xianspace/archive/2009/04/05/1429835.html 前言 今天在安装sqlserver2008 r2的时候,在 ...

  5. SQL内置系统账户:Local system/Network service/Local Service 区别

    内置系统账户:Local system/Network service/Local Service 区别 参考文献: http://www.cnblogs.com/xianspace/archive/ ...

  6. SQL2008系统账户:Local system/Network service/Local Service 区别

    内置系统账户:Local system/Network service/Local Service 区别 LocalSystem   账户 LocalSystem是预设的拥有本机所有权限的本地账户,这 ...

  7. Local System/Network Service/Local Service权限介绍

    报错:错误代码 0x800700b7 配置错误定义了重复的"system.web.extensions/scripting/scriptResourceHandler"节 这个问题 ...

  8. 内置系统账户:Local system/Network service/Local Service 区别

    LocalSystem   账户 LocalSystem是预设的拥有本机所有权限的本地账户,这个账户跟通常的用户账户没有任何关联,也没有用户名和密码之类的凭证.这个服务账户可以打开注册表的HKEY_L ...

  9. local service system账户_Local System/Network Service/Local Service权限详解

    1.Local System (本地系统): 该账户具有相当高的权限. 首先,该账户也隶属于本地Administrators 用户组,因此所有本地Administrators用户能够进行的操作该账户也 ...

最新文章

  1. 独家 | 如何全面解析数据并创造数据故事
  2. this.name=name;和this.setName(name);的区别
  3. mysql server-存储引擎
  4. C# 枚举在项目中的应用总结
  5. 转 Struct 和 Union区别 以及 对内存对齐方式的说明
  6. erlang精要(18)-以函数作为参数的函数,返回函数的函数(1)
  7. 妙笔生花:一个易用、高效的文本生成开源库
  8. 由DWR1.0到DWR2.0常出现的问题
  9. python的tool模块_barktools-包含各种有用的python模块和脚本的包-Oscar Bark Modules Scripts...
  10. python多分支结构实例_JS优化多分支结构(经典)
  11. 向量外积_解析几何 -向量
  12. VS Code 新扩展,面向 Web 开发人员调试 DOM
  13. oracle指数函数,2.1 标准 Fortran 95 的通用内函数
  14. 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl
  15. Java 8 时间日期库的20个使用示例
  16. 使用formData对象提交表单并上传图片
  17. java 生僻字 问号_csv导出姓名生僻字变问号
  18. 晶振电路的PCB设计
  19. 08运行程序常见错误
  20. Java中file.delete()删除文件失败

热门文章

  1. 双系统centos的安装,win7的启动项消失的解决方法
  2. 设置思科设备console密码、enable密码、vty登录密码
  3. 智能云工厂模式普惠中小企业,千鸟互联或成纸包装产业链“带头大哥”
  4. 2023深圳智慧医疗展览会
  5. 2022山东最新建筑八大员(劳务员)模拟考试题库及答案
  6. HDU1536 SG函数
  7. html中table标签及其它标签居中
  8. oracle pmt函数的使用方法,FS5一体化稳态瞬态荧光光谱仪
  9. 2021深圳PMI-ACP敏捷项目管理认证招生简章
  10. [转载]Maximum Flow: Augmenting Path Algorithms Comparison