本章来主要分析Service是如何绑定到Binder的
我们从activity调用bindService开始
Activity.bindService ->
ContextWrapper.bindService ->
ContextImpl.bindService ->
ActivityManagerNative.getDefault().bindService(ActivityManagerProxy)->
ActivityManagerService. bindService
requestServiceBindingLocked(r.app.thread.scheduleBindService)->
ActivityThread. scheduleBindService
下面简单介绍下ActivityManagerNative,ActivityManagerProxy,ActivityManagerService的关系。这个是通过aidl实现的跨进程通信的基本应用。如第二章例子里面的aidl的实现一样,ActivityManagerNative,ActivityManagerProxy是通过eclipse自动生成的类文件。ActivityManagerNative相当于Stub,ActivityManagerProxy相当于Proxy,ActivityManagerService相当于继承了Stub的MyBinder。所以一般bindService的调用方式是:getDefault()获取ActivityManagerProxy对象,然后调用ActivityManagerProxy的bindService,然后调用mRemote.transact,调到ActivityManagerNative的onTransact,它里面调用bindService调到ActivityManagerService的bindService。
操作:
1. 先从HashMap<IBinder, Service >:mServices里找出目的Service。如下指令:
Service s = mServices.get(data.token);
2. 执行了onBind()函数,得到myBinder对象。
IBinder binder = s.onBind(data.intent);
3. 在取得binder之后,通过ActivityManagerProxy的publishService方法
ActivityManagerNative.getDefault().publishService(data.token, data.intent, binder);
4. 在该方法内,会通过data.writeStrongBinder(JNI调用)操作C环境,创建myBinder相对的BBinderHolder对象,然后创建一个和java环境交互的BBinder对象。这样就在C环境搭建了一个和java环境交互的接口。下面就该在java环境创建另一个交互接口了。
5. 在ActivityManagerNative中data.readStrongBinder()函数中,在得到C环境的binder对象bpBinder时,会创建一个BinderProxy,并且将bpBinder赋值给BinderProxy的mObject。至此就完成了binder的绑定操作。
Binder整体结构如下图:
Service绑定binder如下图:
参考:http://blog.csdn.net/zhanghw0917/article/details/5629865
- 大小: 57.7 KB
- 大小: 12.7 KB
分享到:
相关推荐
本篇文章将深入分析Binder机制,并通过一个实际的例子来阐述Binder服务和客户端的实现。 首先,我们了解Binder的基本概念。Binder是Android独有的,它是一种基于C/S架构的轻量级通信方式。服务端(Server)通过...
**三、Binder机制的优势** - **效率高**:由于Binder驱动直接在内核空间处理数据交换,减少了用户空间到内核空间的切换,提高了性能。 - **安全性**:Binder机制允许系统控制权限,只允许授权的进程访问服务,增强了...
Service的注册过程包括创建Service的Binder对象,绑定到System Server的Binder上下文,然后通过startService或bindService方法将请求发送到System Server,System Server接收到请求后,会通过Binder机制调用Service...
"service demo"是指一个示例程序,它展示了如何在Android应用中创建和使用Service,特别强调了"Binder"机制的使用。Binder是Android系统中的一个重要组件,它是进程间通信(IPC,Inter-Process Communication)的...
总结起来,`binderservice demo`项目是一个关于Android中Binder与Service通信的实例,涵盖了本地Service和远程Service的绑定与交互。理解和实践这个示例,对于开发者深入掌握Android IPC机制以及优化应用程序的性能...
Service Manager是Android系统中的一个关键组件,它负责管理所有系统服务,并且作为Binder机制的核心部分之一,充当着Binder守护进程的角色。Service Manager的主要职责包括: - 注册和管理各种服务。 - 提供服务...
在Android系统中,Binder是实现进程间通信(IPC,Inter-Process Communication)的关键技术,它是一种轻量级的通信机制,使得应用程序之间可以共享服务和数据。本篇将通过一个学习实例来深入理解Android Binder的...
理解并熟练掌握Service的生命周期和绑定机制是Android开发中的关键技能,它可以帮助你构建高效、稳定的应用程序,同时确保用户体验不受后台服务的影响。在实际开发中,应根据需求选择启动服务还是绑定服务,合理利用...
在Binder机制中,主要涉及到三个对象:Binder、Stub和Proxy。Binder是Server端的对象,负责提供服务;Stub是Binder的代理对象,负责将Binder对象暴露给Client端;Proxy是Client端的对象,负责与Stub对象进行通信。 ...
2. **绑定服务到Service Manager**:接着,通过调用`IServiceManager::addService()`方法将服务注册到Service Manager。 3. **Service Manager管理**:Service Manager会将服务信息存储在其内部的数据结构中,以便...
许多核心服务,如Activity Manager Service (AMS)、Window Manager Service (WMS)等,以及自定义服务都需要依赖Binder进行跨进程数据交换和服务调用。本文将以MediaService为例,深入剖析Binder的工作原理及其实现...
3. Activity绑定Service并使用Binder:在Activity中,我们可以通过bindService()方法绑定到Service,并在onServiceConnected()回调中获取到Binder对象。之后就可以调用Service中定义的方法了。 ```java public ...
Atlassian-xmlrpc-binder-support-0.9.jar.zip 是一个针对Atlassian产品的特定版本的库,主要用于支持XML-RPC(远程过程调用)协议。XML-RPC是一种简单、轻量级的远程调用方法,它允许不同编程语言之间的互操作性,...
5. **Service与Binder**:在Android中,Service通常用于长时间运行的后台任务,它可以绑定到客户端,通过AIDL接口提供服务。`startService()`用于启动Service,而`bindService()`则用于建立客户端和服务端的连接。 ...
本教程将深入探讨“android--service实例”,讲解如何创建、启动、绑定以及管理Service。 首先,我们来理解Service的基本概念。在Android应用开发中,Service主要用于处理那些不需要用户界面但需要后台运行的任务,...
本篇将深入探讨Service与Activity之间的绑定机制,以及如何在实际开发中有效地利用这一特性。 1. **Service的基本概念** Service是在Android系统中运行的后台组件,它可以没有用户界面,专注于执行长时间任务,如...
1. 通过Binder:Service可以在onBind()方法中返回一个实现了IBinder接口的对象,客户端可以通过这个对象与Service进行数据交换。 2. 通过Intent:使用startService()发送Intent传递数据,Service在onStartCommand()...
在"Binder_client"中,客户端会通过Intent启动或绑定到服务端的Service。一旦连接建立,客户端就可以调用之前提到的IBinder接口中的方法,比如请求第三方登录的授权码。这里可能涉及到网络请求,如OAuth2.0协议,...
4. onUnbind():所有客户端解绑后调用,表示没有客户端再与Service绑定。 5. onDestroy():Service销毁时调用,表示Service生命周期结束。 AIDL的具体使用步骤: 1. 创建AIDL文件,定义接口和数据类型。 2. 编译...
将Activity与Service绑定是一种常见的通信方式,尤其在需要在后台运行任务且需要与用户界面保持交互时。本教程将重点讲解如何在Kotlin环境中实现Activity与Service的绑定、启动、解绑以及关闭过程。 1. **Service的...