国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
android Camera模塊分析
Android Camera Module Architecture and Bottom layer communication mechanism
             -----------albertChen
Android應(yīng)用程序編程語(yǔ)言是JAVA,而linux的很多服務(wù)程序,包括一些libraries都是用c 或者c++寫(xiě)的,應(yīng)用程序使用什么樣的機(jī)制去調(diào)用這些系統(tǒng)函數(shù)的呢?Java的虛擬機(jī)可以通過(guò) System.loadLibrary 來(lái)加載本地庫(kù),也可以通過(guò)JNI函數(shù) RegisterNatives來(lái)注冊(cè)與類(lèi)相關(guān)聯(lián)的本地方法。在Android中對(duì)于一些底層平臺(tái)相關(guān)的native函數(shù)大多采用注冊(cè)關(guān)聯(lián)的方式來(lái)調(diào)用。
系統(tǒng)啟動(dòng)后兩個(gè)重要的process:
1:App_main process: 進(jìn)程通過(guò)AndroidRuntime調(diào)用register_jni_procs向JNI注冊(cè)模塊的native函數(shù)供JVM調(diào)用。
2:Mediaserver proces:進(jìn)程注冊(cè)了以下幾個(gè)server:
AudioFlinger, MediaPlayerServer;CameraService.

Android Camera Application調(diào)用native 函數(shù)流程:
  首先Android Runtime調(diào)用register_android_hardware_Camera注冊(cè)Camera相關(guān)的navtive函數(shù)到JNI。然后調(diào)用android_hardware_Camera_native_setup為Application創(chuàng)建一個(gè)client 通過(guò)openCameraHardware打開(kāi)設(shè)備,并連接到CameraServer。Application 開(kāi)啟preview的過(guò)程與Application建立到CameraService之間連接相似。這個(gè)過(guò)程如下圖:

  從上面可以看出在JAVA VM 與native之間存在一個(gè)非常重要的連接層JNI即JAVA Native Interface。Android1.0平臺(tái)提供了Camera相關(guān)的native接口,如果這些接口不夠的話,通過(guò)這種機(jī)制我們可以方便的進(jìn)行擴(kuò)展,但是我們自己擴(kuò)展的接口是與我們的硬件平臺(tái)相關(guān)的,并不是Android官方支持的。網(wǎng)上有人說(shuō)Android1.0不支持JNI,Android無(wú)法執(zhí)行本地JNI調(diào)用,但從Android源碼來(lái)看是乎不存在這種情況,至少是支持注冊(cè)與類(lèi)相關(guān)聯(lián)的本地方法。

                Android Architecture

JAVA process 與Native process之間的通信
     Native process姑且認(rèn)為是以c,c++語(yǔ)言編寫(xiě)服務(wù)程序(是獨(dú)立的一個(gè)進(jìn)程)。JAVA process是通常說(shuō)的Android Application。還是Camera模塊為例。我們要建立Camera Object,與CameraService Object之間的通信。
JAVA Application調(diào)用native_setup在CameraService中創(chuàng)建了一個(gè)Camera客戶端,客戶端通過(guò)getCameraService取得CameraSevice中的IBinder對(duì)象,為JAVA Application 與CamerService之間建立了一個(gè)接口ICameraService,通過(guò)這個(gè)接口我們調(diào)用BpCameraService::connect 實(shí)際上通過(guò)前面取得的IBinder對(duì)象將調(diào)用CameraService::onTransact函數(shù)在這個(gè)函數(shù)中再調(diào)用BnCameraSrvice::onTransact至此JAVA Application與CameraService之間的消息管道建立完畢。


上圖中,Camera.jar Camera.cpp,ICamera, ICameraService的對(duì)象都屬于java application process,當(dāng)兩個(gè)object之間的通信建立完畢,java application通過(guò)ICamera接口向CameraService中Camera Client發(fā)送消息。
在Native層,不同進(jìn)程間兩個(gè)對(duì)象需要傳遞消息需要繼承IBinder接口,如果一個(gè)對(duì)象只需要發(fā)起連接可以繼承IBinder的擴(kuò)展接口BpInterface,如果需要接受連接請(qǐng)求可以繼承BnInterface接口,比如在ICamera.cpp中有兩個(gè)接口BpCamera與BnCamera,BpCamera用于發(fā)送消息,BnCamera由CameraService繼承,最近消息響應(yīng)通過(guò)BnCamera調(diào)用CameraService::client對(duì)象處理消息。
AudioRecord,AudioFinger,MediaPlayer其底層接口實(shí)現(xiàn)方式與Camera類(lèi)似。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ANDROID JNI之JAVA域與c域的互操作
Android Camera調(diào)用過(guò)程分析
Android Camera分析
Android 4.0 Camera架構(gòu)分析之Camera初始化
Android
Android Development with OpenCV
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服