這里我再介紹一種mmap()在Android系統(tǒng)上的使用場(chǎng)景, mmap的設(shè)計(jì)目的就是為了讓文件的訪問(wèn)更有效率 ,所以當(dāng)APK進(jìn)行安裝時(shí),為了更高效的讀取APK包里面的文件,同樣也用到了mmap函數(shù)。
成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷,提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷、小程序制作、公眾號(hào)商城、等建站開發(fā),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。
Binder機(jī)制中mmap的最大特點(diǎn)是一次拷貝即可完成進(jìn)程間通信 。Android應(yīng)用在進(jìn)程啟動(dòng)之初會(huì)創(chuàng)建一個(gè)單例的ProcessState對(duì)象,其構(gòu)造函數(shù)執(zhí)行時(shí)會(huì)同時(shí)完成binder mmap,為進(jìn)程分配一塊內(nèi)存,專門用于Binder通信,如下。
可以看到Android的匿名共享內(nèi)存是通過(guò) ashmem_create_region() 函數(shù)來(lái)申請(qǐng)共享內(nèi)存的,它會(huì)在/dev/ashmem下創(chuàng)建一個(gè)虛擬文件,Linux原生共享內(nèi)存是通過(guò)shmget()函數(shù),并會(huì)在/dev/shm下創(chuàng)建虛擬文件。
1、靜態(tài)加載:System.loadLibrary(String libname),來(lái)直接加載,對(duì)于一個(gè)app它只能加載system的和我們自己添加到j(luò)niLibs下的so文案。靜態(tài)加載會(huì)去這些路徑找到對(duì)應(yīng)的庫(kù)否則會(huì)拋出異常。
2、動(dòng)態(tài)加載和靜態(tài)加載指的是什么時(shí)候加載 ,動(dòng)態(tài)加載是運(yùn)行時(shí)加載(CommonJS),靜態(tài)加載是編譯時(shí)加載(ES6)。當(dāng)然es6也提供的動(dòng)態(tài)加載,即import() 。同步加載還是異步加載指的是加載的方式。 靜態(tài)加載中都是同步加載的。
3、含義不同。動(dòng)態(tài)指的是變化、運(yùn)動(dòng)或者活動(dòng)的狀態(tài),強(qiáng)調(diào)事物的運(yùn)動(dòng)性和變化性;而靜態(tài)則指的是穩(wěn)定、靜止或者停滯的狀態(tài),強(qiáng)調(diào)事物的不動(dòng)性和穩(wěn)定性。 時(shí)間維度不同。
4、動(dòng)態(tài)加載與靜態(tài)加載相對(duì)來(lái)說(shuō),建議使用動(dòng)態(tài)加載,靜態(tài)加載固定在了xml文件中,永遠(yuǎn)不變。
5、靜態(tài)引用是在編譯jsp前簡(jiǎn)單地把源代碼包含進(jìn)來(lái) 動(dòng)態(tài)引用是在執(zhí)行時(shí),把web請(qǐng)求和響應(yīng)對(duì)象傳過(guò)去,對(duì)請(qǐng)求和相應(yīng)對(duì)象進(jìn)一步處理 也就是說(shuō),靜態(tài)引用,引用的代碼是什么,引用進(jìn)來(lái)就是什么。
6、動(dòng)態(tài)布局,也就是可以根據(jù)業(yè)務(wù)的需求改變界面。實(shí)際上就是用代碼寫出界面,代碼量比較大。而且維護(hù)起來(lái)十分的繁瑣。特別是一些界面空間比較多的時(shí)候。靜態(tài)的布局,是通過(guò)xml來(lái)實(shí)現(xiàn)的,適用于頁(yè)面比較固定的情況。
mmap的關(guān)鍵點(diǎn)是實(shí)現(xiàn)了用戶空間和內(nèi)核空間的數(shù)據(jù)直接交互而省去了空間不同數(shù)據(jù)不通的繁瑣過(guò)程,因此mmap效率很高。
MMAP是一種內(nèi)存映射文件的方法,將文件或者一些對(duì)象映射到進(jìn)程的地址空間。實(shí)現(xiàn)文件磁盤地址跟進(jìn)程虛擬地址空間中的一段內(nèi)存空間一一映射關(guān)系。
MMKV 是基于 mmap 內(nèi)存映射的 key-value 組件,底層序列化/反序列化使用 protobuf 實(shí)現(xiàn),性能高,穩(wěn)定性強(qiáng)。
能使用信號(hào)的。使用sigaction()或者signal()都可以的。
Android 應(yīng)用是在dalvik虛擬機(jī)中運(yùn)行的。NDK可以讓你使用本地代碼語(yǔ)言來(lái)開發(fā)應(yīng)用,比如說(shuō)C/C,這種方法對(duì)某些類型的應(yīng)用的是有好處的,可以充分利用本地代碼和在某些情況下加速代碼的執(zhí)行。
Android中JNI是編譯so庫(kù)的源代碼,編譯成功后會(huì)生成SO庫(kù),android中最終是使用SO庫(kù)的。
安裝好以上android應(yīng)用程序的開發(fā)環(huán)境后,還可以選擇是否需要配置emulator和adb工具的環(huán)境變量,以方便在進(jìn)行JNI開發(fā)的時(shí)候使用。
名稱欄目:android函數(shù)映射 android反射調(diào)用
文章分享:http://www.chinadenli.net/article8/diccpip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、關(guān)鍵詞優(yōu)化、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)