Android Binder实战开发指南之Framework层直接调用Native Binder Service

           Android Binder实战开发指南之Framework层直接调用Native BinderService

前言

      承接上一篇文章Android Binder实战开发指南之创建Framework层Binder系统服务,本篇来介绍一下怎么通过Java直接使用Native Binder Service。这里使用的是前面创建的Native Service。

 

实现步骤

     如果一直从前面的文章看过来,那么实现起来也不是很复杂,无外乎先获取Native Binder Service的远程代理,然后通过远程代理调用实际的服务端。下面直接奉上代码

    private void callNativeBinderServiceFun() {
        //获取Native Binder Service的代理
        IBinder binder = ServiceManager.getService("service.testservice");
        String DESCRIPTOR = "android.TestServer.ITestService";
        try {
            if (binder != null) {
                Parcel data = Parcel.obtain();
                Parcel replay = Parcel.obtain();
                try {
                    data.writeInterfaceToken(DESCRIPTOR);
                    //通过BpBinder进行数据交互
                    binder.transact(IBinder.FIRST_CALL_TRANSACTION, data, replay, 0);
                    int result = replay.readInt();
                    Log.e("Client","get result :" + result);
                } finally {
                    replay.recycle();
                    data.recycle();
                }
            }

        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

然后分别运行Native Binder Service和Android工程,具体的运行结果如下所示

Android Binder实战开发指南之Framework层直接调用Native Binder Service_第1张图片

                                                                                  服务端

 

Android Binder实战开发指南之Framework层直接调用Native Binder Service_第2张图片

                                                                               Android应用端

 

总结

    如上就是 Java直接调用Native Binder Service的具体步骤和实现原理,当前看懂这些的前提是必须对Binder的原理有一定的理解和掌握。到这里Binder实战大荟萃的四篇文章已经完全结束,这四个情景应该概括了实际使用中的绝大部分场景,掌握了这四种Binder的实际应用,我想对于Binde的实际应用开发应该不是难事了。

最后统一奉上源码Binder实战大荟萃源码,由于牵涉到公司信息所以做了些特殊处理,各位谅解!

 

你可能感兴趣的:(Android,Binder实战开发指南)