`
zhy20045923
  • 浏览: 157374 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Binder机制分析【三】-service绑定Binder

阅读更多
本章来主要分析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
分享到:
评论
1 楼 qlraishui 2012-06-27  
good

相关推荐

    Binder机制分析【二】-Binder服务/客户端实现举例

    本篇文章将深入分析Binder机制,并通过一个实际的例子来阐述Binder服务和客户端的实现。 首先,我们了解Binder的基本概念。Binder是Android独有的,它是一种基于C/S架构的轻量级通信方式。服务端(Server)通过...

    Android进程间通信-Binder机制详解

    **三、Binder机制的优势** - **效率高**:由于Binder驱动直接在内核空间处理数据交换,减少了用户空间到内核空间的切换,提高了性能。 - **安全性**:Binder机制允许系统控制权限,只允许授权的进程访问服务,增强了...

    android binder机制 以service的注册为例

    Service的注册过程包括创建Service的Binder对象,绑定到System Server的Binder上下文,然后通过startService或bindService方法将请求发送到System Server,System Server接收到请求后,会通过Binder机制调用Service...

    service demo 亲测可用 binder 机制,好用的很

    "service demo"是指一个示例程序,它展示了如何在Android应用中创建和使用Service,特别强调了"Binder"机制的使用。Binder是Android系统中的一个重要组件,它是进程间通信(IPC,Inter-Process Communication)的...

    binderservice demo

    总结起来,`binderservice demo`项目是一个关于Android中Binder与Service通信的实例,涵盖了本地Service和远程Service的绑定与交互。理解和实践这个示例,对于开发者深入掌握Android IPC机制以及优化应用程序的性能...

    Android进程间通信-Binder机制

    Service Manager是Android系统中的一个关键组件,它负责管理所有系统服务,并且作为Binder机制的核心部分之一,充当着Binder守护进程的角色。Service Manager的主要职责包括: - 注册和管理各种服务。 - 提供服务...

    android通信机制binder实例

    在Android系统中,Binder是实现进程间通信(IPC,Inter-Process Communication)的关键技术,它是一种轻量级的通信机制,使得应用程序之间可以共享服务和数据。本篇将通过一个学习实例来深入理解Android Binder的...

    071集-Service的生命周期与绑定

    理解并熟练掌握Service的生命周期和绑定机制是Android开发中的关键技能,它可以帮助你构建高效、稳定的应用程序,同时确保用户体验不受后台服务的影响。在实际开发中,应根据需求选择启动服务还是绑定服务,合理利用...

    Binder面试题解答以及源码流程分析

    在Binder机制中,主要涉及到三个对象:Binder、Stub和Proxy。Binder是Server端的对象,负责提供服务;Stub是Binder的代理对象,负责将Binder对象暴露给Client端;Proxy是Client端的对象,负责与Stub对象进行通信。 ...

    Android进程间通信机制(Binder)介绍

    2. **绑定服务到Service Manager**:接着,通过调用`IServiceManager::addService()`方法将服务注册到Service Manager。 3. **Service Manager管理**:Service Manager会将服务信息存储在其内部的数据结构中,以便...

    Android深入浅出之Binder机制

    许多核心服务,如Activity Manager Service (AMS)、Window Manager Service (WMS)等,以及自定义服务都需要依赖Binder进行跨进程数据交换和服务调用。本文将以MediaService为例,深入剖析Binder的工作原理及其实现...

    进程内Activity和service使用Binder通信代码备份

    3. Activity绑定Service并使用Binder:在Activity中,我们可以通过bindService()方法绑定到Service,并在onServiceConnected()回调中获取到Binder对象。之后就可以调用Service中定义的方法了。 ```java public ...

    atlassian-xmlrpc-binder-support-0.9.jar.zip

    Atlassian-xmlrpc-binder-support-0.9.jar.zip 是一个针对Atlassian产品的特定版本的库,主要用于支持XML-RPC(远程过程调用)协议。XML-RPC是一种简单、轻量级的远程调用方法,它允许不同编程语言之间的互操作性,...

    aidl跨进程通信demo,亲测可用,binder机制,改完bug

    5. **Service与Binder**:在Android中,Service通常用于长时间运行的后台任务,它可以绑定到客户端,通过AIDL接口提供服务。`startService()`用于启动Service,而`bindService()`则用于建立客户端和服务端的连接。 ...

    android--service实例

    本教程将深入探讨“android--service实例”,讲解如何创建、启动、绑定以及管理Service。 首先,我们来理解Service的基本概念。在Android应用开发中,Service主要用于处理那些不需要用户界面但需要后台运行的任务,...

    android Service 与Activity绑定

    本篇将深入探讨Service与Activity之间的绑定机制,以及如何在实际开发中有效地利用这一特性。 1. **Service的基本概念** Service是在Android系统中运行的后台组件,它可以没有用户界面,专注于执行长时间任务,如...

    Android--Application-Service.rar_DEMO_service

    1. 通过Binder:Service可以在onBind()方法中返回一个实现了IBinder接口的对象,客户端可以通过这个对象与Service进行数据交换。 2. 通过Intent:使用startService()发送Intent传递数据,Service在onStartCommand()...

    Binder模拟第三方登录Demo.zip

    在"Binder_client"中,客户端会通过Intent启动或绑定到服务端的Service。一旦连接建立,客户端就可以调用之前提到的IBinder接口中的方法,比如请求第三方登录的授权码。这里可能涉及到网络请求,如OAuth2.0协议,...

    android笔记--Service与AIDL

    4. onUnbind():所有客户端解绑后调用,表示没有客户端再与Service绑定。 5. onDestroy():Service销毁时调用,表示Service生命周期结束。 AIDL的具体使用步骤: 1. 创建AIDL文件,定义接口和数据类型。 2. 编译...

    Activity绑定Service(Kotlin)

    将Activity与Service绑定是一种常见的通信方式,尤其在需要在后台运行任务且需要与用户界面保持交互时。本教程将重点讲解如何在Kotlin环境中实现Activity与Service的绑定、启动、解绑以及关闭过程。 1. **Service的...

Global site tag (gtag.js) - Google Analytics