`
zhy20045923
  • 浏览: 153830 次
  • 性别: 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

相关推荐

    Android-Binder-Service-Example:如何与服务类进行通信的一个例子抛出了一个活页夹

    1)在您的服务中,创建一个Binder实例,或者:a)包含客户端可以调用的公共方法b)返回当前Service实例,该实例具有客户端可以调用的公共方法c)或返回另一个类的实例服务使用公共方法托管,客户端可以调用2)从on...

    使用AIDL实现Service与Client绑定后的双向调用

    使用AIDL实现Service与Client绑定后的双向调用,Client在绑定Service时传入自己的Binder ,Service使用这个Binder实现调用Client的方法

    Android Service绑定过程完整分析

    通常我们使用Service都要和它通信,当想要与Service通信的时候,那么Service要处于绑定状态的。然后客户端可以拿到一个...那接下来就从源码的角度分析Service的绑定过程。 当然是从ContextImpl的bindService方法开

    绑定服务BoundService利用扩展的IBinder类实现

    一个扩展的IBinder类实现通信的简单例子

    Android系统源代码情景分析-罗升阳-源码

    8.3 Service组件在进程内的绑定过程 第9章 Android系统广播机制 9.1 广播机制应用实例 9.2 广播接收者的注册过程 9.3 广播的发送过程 第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用...

    Android IPC机制ACtivity绑定Service通信代码实例

    Binder通信过程类似于TCP/IP服务连接过程binder四大架构Server(服务器),Client(客户端),ServiceManager(DNS)以及Binder驱动(路由器) 其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间。这四...

    (初步)bindService使用activity绑定方法来绑定指定的Service

    总体描述:使用bindService方法来使得activity关联指定的Service 注意点: 1.绑定时,要在Activity中实现ServiceConnection...2.Service中,onBind方法要返回一个Binder类,否则只会创建出Service实例,但不能实现绑定

    《Android系统源代码情景分析》

    8.3 Service组件在进程内的绑定过程 第9章 Android系统广播机制 9.1 广播机制应用实例 9.2 广播接收者的注册过程 9.3 广播的发送过程 第10章 Content Provider组件的实现原理 10.1 Content Provider...

    binder:一种轻量级但功能强大的方法来将应用程序状态与业务逻辑绑定

    入门安装在flutter项目的pubspec.yaml中,添加以下依赖项: dependencies : binder : 在您的库中添加以下导入: import 'package:binder/binder.dart' ;基本用法任何状态都必须通过StateRef声明其初始值: final ...

    源码分析Android的消息机制

    ​Android的消息机制伴随着安卓四大组件的生命周期,Activity启动,Service绑定与注册,Broadcast广播的发送,ContentProvider的启动等过程,先是依靠Binder将主线程切到Binder线程池的线程,系统完成组件对象的创建...

    android杀不死的app

    4:进程之间互相盯着,需要用到IPC进程间通信技术(也就是Binder机制AIDL 5:注意配置远程服务启动为一个新的进程,为新进程命名为 android:process=".remoteService" 6:进程A服务绑定进程B服务,进程B服务绑定进程...

    Service与Activity的通信

    写的一个Service与Activity的相互通信,Service发送数据更新绑定的Activity的UI

    bindService实现activity设置数据,在Service中打印输出

    注意点:1、实现Activity与Service的绑定 2、在Service中要自定义一个Binder类继承自Binder,并在此内部类中写好设置数据的方法 3、activity中获取Binder对象,并完成强转 4、在activity中完成上层数据的设置

    Android开发艺术探索

     9.3.2 Service的绑定过程 / 344  9.4 BroadcastReceiver的工作过程 / 352  9.4.1 广播的注册过程 / 353  9.4.2 广播的发送和接收过程 / 356  9.5 ContentProvider的工作过程 / 362  第10章 Android的消息机制...

    Android stuido安卓小程序

    实现服务的onCreate(),重写onbind()方法,销毁onDestroy()方法如果 Activity 绑定,Activity 就可以取到 IBinder 对象,可以直接调用对象的方法,相同应用内部不同组件绑定,可以使用内部类以及Binder对象来...

    android 实验6服务

    Step 1创建一个服务类继承自Service,在服务类中定义内部类(Binder的之类,并在其中定义业务逻辑方法:发送一条通知,点击通知能否返回主Activity)并重写onBind方法,确保在清单文件中注册服务;业务逻辑放在子...

    unityStrangeIoc

    MVCS中的Service层,负责与第三方交互,这个Service我理解的,并不是一定指代服务器,也可以是其他的软件,什么都可以,它就是我们程序对外的接口 7.Dispatcher 派发器是框架内通信主线的其中一种,用来派发消息,...

    Android系统源代码情景分析光盘

    5.5 Binder对象死亡通知机制..................................... 212 5.5.1 注册死亡接收通知........................................ 213 5.5.2 发送死亡接收通知...........................................

    Service与Activity之间的通信(同一进程)

    一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现。 当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用。比如你后台...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    9.3.2 Service的绑定过程 344 9.4 BroadcastReceiver的工作过程 352 9.4.1 广播的注册过程 353 9.4.2 广播的发送和接收过程 356 9.5 ContentProvider的工作过程 362 第10章 Android的消息机制 372 10.1 ...

Global site tag (gtag.js) - Google Analytics