freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

android系統(tǒng)進(jìn)程間通信binder機(jī)制在應(yīng)用程序框架層的java接口源代碼-全文預(yù)覽

2025-04-28 05:06 上一頁面

下一頁面
  

【正文】 nager守護(hù)進(jìn)程中去,最后進(jìn)入一個(gè)循環(huán),等待Client的請求。 我們不關(guān)心這兩個(gè)函數(shù)的具體實(shí)現(xiàn),有興趣的讀者可以參考在Ubuntu上為Android系統(tǒng)的Application Frameworks層增加硬件訪問服務(wù)一文。 25. }intvoidnative21. {val){TAGprivate8. extends5. import2. throwssetVal(int127. =static125. +int123. }121. return120. ()。117. ()。0)。{_result。()。_dataintfinally99. 0)。try93. =91. voidDESCRIPTOR。remote。{75. mRemote。{71. Proxydata,}66. ()。62. =}57. return56. {50. true。(DESCRIPTOR)。46. INTERFACE_TRANSACTION:{41. flags)data,booleanOverride39. }37. return36. asBinder()33. (()iin)。)))(((iin!=null)amp。()(DESCRIPTOR)。null。((obj==null))staticneeded.generatingananpublic13. theat/**12. DESCRIPTORprivate11. Stubpublic9. stub/**8. 6. publicfile:MODIFY.autogenerated.* 注意,這是一個(gè)aidl文件。void5. IHelloService 這樣獲取Service Manager的Java遠(yuǎn)程接口的過程就完成了。 =BinderProxy())。 因此,最終以這個(gè)BinderProxy對象為參數(shù)創(chuàng)建一個(gè)ServiceManagerProxy對象。return15. }13. return12. !=in(objpublicServiceManagerNative = refObject, , = (jobject)valfindObject(amp。 6. }return5. (),sobjectour回到前面的javaObjectForIBinder函數(shù)中,下面這段代碼:view plain1. ifAndroidRuntime::registerNativeMethods(envGetFieldID(clazz,=30. 28. sendDeathNotice,25. envGetMethodID(clazz,=find==envFindClass(kBinderProxyPathName)。17. (jclass)toLOG_FATAL_IF(clazz15. =envGetMethodID(clazz,=)。Unableclazz7. 4. {intkBinderProxyPathName mSelf。mObject。ObjectstructAndroidRuntime::registerNativeMethods(=16. 14. envGetMethodID(clazz,=find==envFindClass(kBinderPathName)。6. jclass5. env)android/os/Binder。char*gBinderOffsets。mExecTransact。mClass。Class 50. }return49. }47. referencethat43. jnienv_to_javavm(env),42. valattachObject(amp。41. envGetObjectField(object,40. refObjectstillproxycan//38. backholdnative36. envSetIntField(object,34. theholds%p!\n,LOGV(objectForBinder32. !=object30. }28. set!!!,no%p}23. return22. (),%p:NULL)={if18. (jobject)valfindObject(amp。weelse39。15. AutoMutex14. nativeofserializeholdtheForobject。object)。our//printf(objectForBinder8. =own!//6. (valcheckSubclass(amp。NULL)javaObjectForIBinder(JNIEnv*BpBinder(0)。 相當(dāng)于是:view plain1. spIBinder= b)。spIBinder3. clazz)jobject 11. }9. IBinderpublic8. otheruseIServiceManager,*5. objectReturn......2. class ......14. FindsServiceManager。null)staticstaticfinal 這個(gè)主角就是ServiceManager了,我們也先看一下ServiceManager是長什么樣子的: 因此,要獲取Service Manager的Java遠(yuǎn)程接口ServiceManagerProxy,首先要有一個(gè)BinderProxy對象。 我們要獲取的Service Manager的Java遠(yuǎn)程接口是一個(gè)ServiceManagerProxy對象的IServiceManager接口。獲取Service Manager的Java遠(yuǎn)程接口 這篇文章通過五個(gè)情景來學(xué)習(xí)Android系統(tǒng)進(jìn)程間通信Binder機(jī)制在應(yīng)用程序框架層的Java接口:1. 獲取Service Manager的Java遠(yuǎn)程接口的過程;2. HelloService接口的定義;3. HelloService的啟動(dòng)過程;4. Client獲取HelloService的Java遠(yuǎn)程接口的過程;5. 通常,在應(yīng)用程序中,我們都是把Server實(shí)現(xiàn)為Service的形式, Manager,接著就可以使用這個(gè)Service提供的功能了,這個(gè)與運(yùn)行時(shí)庫的Binder接口是一致的。 細(xì)心的讀者會發(fā)現(xiàn),這幾篇文章分析的Binder接口都是基于C/C++語言來實(shí)現(xiàn)的,但是我們在編寫應(yīng)用程序都是基于Java語言的,那么,我們?nèi)绾问褂肑ava語言來使用系統(tǒng)的Binder機(jī)制來進(jìn)行進(jìn)程間通信呢?這就是本文要介紹的Android系統(tǒng)應(yīng)用程序框架層的用Java語言來實(shí)現(xiàn)的Binder接口了。 在前面幾篇文章中,我們詳細(xì)介紹了Android系統(tǒng)進(jìn)程間通信機(jī)制Binder的原理,并且深入分析了系統(tǒng)提供的Binder運(yùn)行庫和驅(qū)動(dòng)程序的源代碼。 這里,我們?nèi)匀皇峭ㄟ^具體的例子來說明Binder機(jī)制在應(yīng)用程序框架層中的Java接口,主要就是Service Manager、Server和Client這三個(gè)角色的實(shí)現(xiàn)了。 所以希望讀者在閱讀下面的內(nèi)容之前,先了解一下前面在Ubuntu上為Android系統(tǒng)的Application Frameworks層增加硬件訪問服務(wù)這篇文章。 一. 從ServiceManagerProxy類的構(gòu)造函數(shù)可以看出,它需要一個(gè)BinderProxy對象的IBinder接口來作為參數(shù)。 再來看一下是通過什么路徑來獲取Service Manager的Java遠(yuǎn)程接口ServiceManagerProxy的。 接下來,這個(gè)函數(shù)定義在frameworks/base/core/java/android/os/:view plain1. public{3. private5. private{!=7. return8. }10. //manager(())。sServiceManager。 這個(gè)函數(shù)定義在frameworks/base/core/java//android/internal/os/:view plain1. public4. *contextsystem.usuallyofcan6. *native這里可以看出,它實(shí)現(xiàn)在frameworks/base/core/jni/:view plain1. staticjobjectProcessState::self()getContextObject(NULL)。javaObjectForIBinder(env,5. } b new 接著調(diào)用javaObjectForIBinder把這個(gè)BpBinder對象轉(zhuǎn)換成一個(gè)BinderProxy對象:view plain1. jobjectspIBinderamp。2. {==5. ifourobjects(),9. return10. }12. //ofwilltolooking/creationforSomeonedoit?=NULL)res!=21. LOGV(objectForBinder%p!\n,object%pworking)。(objectnewproxytoThetoreferencewesameis39. jobjectNoteobjectcreated.在介紹這個(gè)函數(shù)之前,先來看兩個(gè)變量gBinderOffsets和gBinderProxyOffsets的定義。 bindernative_offsets_t3. //4. jclass5. jmethodID6. state.10. } 簡單來說,gBinderOffsets變量是用來記錄上面第二個(gè)類圖中的Binder類的相關(guān)信息的,它是在注冊Binder類的JNI方法的int_register_android_os_Binder函數(shù)初始化的:view plain1. const=2. int_register_android_os_Binder(JNIEnv*=8. LOG_FATAL_IF(clazzto10. 12. =I)。19. returnkBinderPathName, 再來看gBinderProxyOffsets的定義:view plain1. static2. {state.8. //9. jfieldID10. jfieldID11. const3. staticclazz。NULL,class9. 11. =)。14. clazzUnable)。==19. LO
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1