静默加载 2017-06-30 03:28 采纳率: 0%
浏览 3515
已结题

activity绑定Service成功时ServiceConnection的回调问题?

Activity绑定Service时ServiceConnection回调onServiceConnected传过来的IBinder对象,为什么相同进程下是Binder对象,不同进程下是BinderProxy对象。

 private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.d(TAG, "IBinder.class.Name : " + service.getClass().getName());
            mService = new Messenger(service);
            Message msg = Message.obtain();
            Bundle data = new Bundle();
            String msgString = "hello ,this is client.";
            data.putString("msg", msgString);
            msg.setData(data);
            msg.replyTo = clientHandler;
            try {
                mService.send(msg);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
  • 写回答

3条回答 默认 最新

  • 蚂蚁冲锋队 2017-06-30 05:45
    关注

    首先android的进程间通信采用的是IPC机制,IPC的主角就是Binder,整个通信机制在设计上是采用了代理模式来实现。
    比如:A(客户端)进程要调用B(服务)进程的一个方法funcB(),
    这个时候A并不能直接去访问B中的方法(出于数据保护,进程间是不允许直接通信的,IPC利用了共享内存来实现通信的)。
    IPC的大致思路是:
    A将这个请求委托给客户端的Binder代理,
    进而将请求转给BinderDriver,
    再将请求给服务端的Binder代理,
    最后通过Binder代理调用B中的funcB()。

    如果不去考虑中间的过程,客户端调用远程服务(跨进程)的时候,都是获得一个远程服务在本地的代理BinderProxy对象。
    通过该对象实现RPC的调用。

    评论

报告相同问题?

悬赏问题

  • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波