java binder

作者:原创时间:2022-03-24
文档

java binder是什么,让我们一起了解一下?

binder是基于c/s架构的,主要包括四个部分:服务端(Server),客户端(Client),Binder驱动ServiceManager,四部分之间的交互都是通过Binder来实现的,而且java层binder架构实际上也是基于c/s架构的。

那么binder机制在java层是如何使用的?

java层binder架构实际上也是基于c/s架构的,而且其在类的命名上也尽量与native层保持一致,因此可认为java层的binder架构是native层binder架构的一个镜像。

示例Binder类的初始化:

const char* const kBinderPathName = "android/os/Binder";
    static int int_register_android_os_Binder(JNIEnv* env)
    {undefined
        jclass clazz = FindClassOrDie(env, kBinderPathName);
        gBinderOffsets.mClass = MakeGlobalRefOrDie(env, clazz);
        gBinderOffsets.mExecTransact = GetMethodIDOrDie(env, clazz, "execTransact", "(IJJI)Z");
        gBinderOffsets.mObject = GetFieldIDOrDie(env, clazz, "mObject", "J");
        return RegisterMethodsOrDie(
            env, kBinderPathName,
            gBinderMethods, NELEM(gBinderMethods));
    }

也可以创建一个Service,在其onBind里返回一个服务端Binder对象,在客户端的ServiceConnection里拿到这个Binder对象。

//服务端
public class BinderPoolService extends Service {
private static final String TAG = "BinderPoolService";
private Binder mBinderPool = new BinderPool.BinderPoolImpl();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return mBinderPool;
}
}
//客户端
private ServiceConnection mBinderPoolConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//拿到服务端返回的Binder接口
mBinderPool = IBinderPool.Stub.asInterface(service);
...
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Intent intent = new Intent(mContext, BinderPoolService.class);
mContext.bindService(intent, mBinderPoolConnection, Context.BIND_AUTO_CREATE);

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
win10c盘满了怎么清理 java binlog 如何清理win10电脑c盘 java bit java blob java break wps怎么求和 java bufferedimage java bufferedoutputstream java build.gradle java bundle java bytebuffer java byte取值范围 java calculate 苹果13怎么开机 java calendar获取当前时间 java callback java ceiling 平板如何录屏 java cglib java binary excel表格怎么合并单元格 java bigdecimal java benchmark java beanutils 手机充电发热发烫是什么原因 手机充电时可以玩手机吗 java bean java base64decoder java base64 java barrier java bacnet win10专业版和企业版的区别 java async java assembly java aspose java aspectj java asmx java ascii java arrays.sort