java binder是什么,讓我們一起了解一下?
binder是基于c/s架構(gòu)的,主要包括四個部分:服務端(Server),客戶端(Client),Binder驅(qū)動ServiceManager,四部分之間的交互都是通過Binder來實現(xiàn)的,而且java層binder架構(gòu)實際上也是基于c/s架構(gòu)的。
那么binder機制在java層是如何使用的?
java層binder架構(gòu)實際上也是基于c/s架構(gòu)的,而且其在類的命名上也盡量與native層保持一致,因此可認為java層的binder架構(gòu)是native層binder架構(gòu)的一個鏡像。
示例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)); ????}
也可以創(chuàng)建一個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);
以上就是小編今天的分享了,希望可以幫助到大家。