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

正文內(nèi)容

基于android的智能手機開發(fā)畢業(yè)設(shè)計(編輯修改稿)

2025-02-14 14:09 本頁面
 

【文章內(nèi)容簡介】 經(jīng)過生成字節(jié)碼文件的這個過程的。使用Java語言編寫好的Android程序代碼,同樣是先用Java編譯器編譯成為字節(jié)碼文件,但是在這之后還需通過Google提供的一個DX工具將編譯好的字節(jié)碼轉(zhuǎn)換成為DEX文件,然后Dalvik虛擬機通過DEX文件獲得執(zhí)行的代碼。 Google棄用字節(jié)碼文件而采用特有的DEX文件格式,這表明在Android實際運行中DEX文件格式相對于字節(jié)碼文件格式應(yīng)該有一些獨特的優(yōu)勢。在Java中當(dāng)一個應(yīng)用程序定義了多個類后,通過編譯則會產(chǎn)生相應(yīng)數(shù)目的class字節(jié)碼文件,在這些字節(jié)碼文件中則必然會有冗余信息,例如一些相同的類庫會冗余等。而DEX文件格式則是把這些class字節(jié)碼文件整合到一個DEX文件中,使得字節(jié)碼中的冗余減少了,同時使整體文件的尺寸也減少了。這樣一來,對于同一個應(yīng)用程序來說,相對于Java的字節(jié)碼文件Android的DEX文件格式在I/O操作中所需要的時間也減少了,同時也減少了查找類所需要的時間。另外DEX使用等長的指令,這樣的話能夠使得DEX文件盡量的簡潔,從而提高了解析速度。通過上面的研究可以看出DEX文件格式是一種專為Dalvik虛擬機設(shè)計的壓縮格式,該格式的高性能很適合內(nèi)存和處理器速度有限的平臺,從中可以看出Android是定位于嵌入式平臺的一個操作系統(tǒng)。在這也體現(xiàn)出了Google給Android所定義的發(fā)展以及戰(zhàn)略方向,如今移動平臺的網(wǎng)絡(luò)應(yīng)用已經(jīng)成為當(dāng)前移動終端設(shè)備的發(fā)展方向,作為網(wǎng)絡(luò)搜索的龍頭大哥,Android就是其打入該移動平臺網(wǎng)絡(luò)應(yīng)用的利器。 Android應(yīng)用開發(fā)和Dalvik虛擬機同樣都使用Java開發(fā)語言,在應(yīng)用程序開發(fā)好以后我們就需要將這個應(yīng)用發(fā)布到Android移動終端設(shè)備。,最后使用Android的appt打包工具把DEX文件,然后就能發(fā)布到移動終端設(shè)備上了。在APK應(yīng)用程序程序包發(fā)布到移動終端設(shè)備后,應(yīng)用程序運行前會對其中的DEX文件進行優(yōu)化,優(yōu)化后的文件格式稱之為DEY,DEY文件被保存到緩存區(qū)域,虛擬機會在緩存中執(zhí)行這些文件。 其次,傳統(tǒng)的Java 虛擬機是采用的是基于棧的設(shè)計,而Dalvik虛擬機則是基于寄存器設(shè)計的?;跅TO(shè)計的虛擬機能夠使指令變得簡單,不需要考慮程序中的源寄存器和目的寄存器,只需要開辟??臻g而不需要為臨時變量再開辟一個存儲空間。另外基于棧設(shè)計的虛擬機移植性比基于寄存器設(shè)計的虛擬機要高很多,從組成原理和嵌入式操作系統(tǒng)課程中我們知道,一般的32位x86處理器的通用寄存器和32位的ARM的通用寄存器數(shù)目是不同的。虛擬機的設(shè)計中,為了執(zhí)行的效率,有時會把這些寄存器一一映射到物理寄存器上,但是由于平臺的不同,導(dǎo)致通用寄存器數(shù)量不同造成如果基于寄存器設(shè)計的虛擬機很難做到一一映射,執(zhí)行效率就會大打折扣。而用基于棧的設(shè)計的話,就不存在這種問題,就很容易的分配寄存器。另外,基于棧設(shè)計的虛擬機采用的是零地址指令,這樣的話指令形式比較緊湊。雖然基于棧結(jié)構(gòu)的虛擬機有上述的一些優(yōu)點,但是為什么Google不采用基于棧的設(shè)計而采用基于寄存器結(jié)構(gòu)設(shè)計Dalvik虛擬機呢。我個人覺得這是和Android所搭載的平臺以及Google的戰(zhàn)略有關(guān)的。首先,Android所搭載的主要平臺為移動終端設(shè)備,如今的移動終端設(shè)備雖然性能比過去好多了,但是還是無法擺脫CPU處理能力低于桌面PC,存儲資源有限的限制,在這樣一個平臺上使用基于棧的設(shè)計,在指令執(zhí)行時必定會多出一個進棧(PUSH)和出棧(POP)的操作,那一定會影響指令執(zhí)行的效率,這也是為什么我們在一些手機平臺上運行Java程序時感到很慢的原因了。其次從Google對Dalvik虛擬機設(shè)計中采用的16個通用寄存器中可以看出Android的發(fā)展方向是基于ARM的硬件平臺,這也和Google的戰(zhàn)略方向相一致。雖然移植性降低了,但是使用二地址和三地址的指令,使得代碼執(zhí)行效率大大提高。另外,Dalvik虛擬機雖然沒有采用現(xiàn)在流行虛擬機技術(shù)例如JIT(just in time,及時編譯)技術(shù),但是Dalvik虛擬機仍然是一個具有很高性能的虛擬機,在這不得不說一下,Dalvik虛擬機是一個設(shè)計相當(dāng)不錯的虛擬機。從Dalvik虛擬機的設(shè)計上我們可以看到Google打算用Android系統(tǒng)來沖擊手機移動終端設(shè)備,想把其提供的服務(wù)擴展到移動設(shè)備上的戰(zhàn)略。 另外,Dalvik虛擬機的設(shè)計方面也有其獨特的地方。它就是本著能夠并發(fā)執(zhí)行多個虛擬機的設(shè)計思路來編寫的。每一個Dalvik虛擬機實例對應(yīng)于一個應(yīng)用程序,同時這個虛擬機實例還都是一個進程空間。換句話說就是一個應(yīng)用對應(yīng)一個Dalvik虛擬機同時對應(yīng)一個進程空間。不同的應(yīng)用程序在不同的Dalvik虛擬機實例中運行,不同的Dalvik虛擬機又對應(yīng)于不同的進程空間,加之不同的應(yīng)用程序在Linux內(nèi)核中以不同的Linux用戶來執(zhí)行,這樣可以最大限度的保證應(yīng)用程度的獨立性和安全性。但Dalvik虛擬機要實現(xiàn)如線程機制,內(nèi)存的分配和管理等操作的話,仍然需要底層操作系統(tǒng)的支持。另外Dalvik虛擬機線程機制中的一個線程對應(yīng)于Linux中相應(yīng)的一個線程,這樣操作系統(tǒng)中的線程就能最大限度的為Dalvik虛擬機服務(wù)。通過這樣的一個設(shè)計,Android的安全性大大提高了。 說到Dalvik虛擬機,那就應(yīng)該說說虛擬機中的一個特殊的虛擬機進程Zygote,之前說過一個Dalvik虛擬機對應(yīng)一個進程空間。Zygote進程的功能有點類似于Linux中的1號進程,在Linux當(dāng)系統(tǒng)啟動時即產(chǎn)生1號進程,而其他的進程都由1號進程創(chuàng)建。在Dalvik虛擬機中Zygote進程fork出所有的虛擬機進程,每當(dāng)系統(tǒng)提出執(zhí)行一個Android應(yīng)用時,需要一個Dalvik虛擬機是,Zygote就會fork出一個子進程來執(zhí)行該應(yīng)用。使用它可以加快系統(tǒng)的執(zhí)行,因為Zygote進程在系統(tǒng)啟動時就產(chǎn)生,已經(jīng)完成了虛擬機的初始化,預(yù)置類庫的加載和初始化等等操作。當(dāng)我們要執(zhí)行一個應(yīng)用而建立一個虛擬機時,只需讓Zygote進程自身復(fù)制,這樣就可以減少虛擬機初始化等操作的時間。另外,對于一些只讀庫所有虛擬機實例都和Zygote進程共享一塊內(nèi)存區(qū),這樣大大減少了對內(nèi)存的開銷。 Android的進程管理機制 Android雖然是基于Linux,但是它卻采用了一種有別于Linux的一種管理機制。Linux在一個進程活動停止后就立刻結(jié)束該進程,而Android在一個進程活動停止后不會立刻結(jié)束該進程,并使該進程常駐內(nèi)存中。直到系統(tǒng)資源不夠需要更多內(nèi)存或者當(dāng)某個結(jié)束進程的事件發(fā)生時才將該進程結(jié)束。 在Android中進程被分成了前臺進程(foreground)、可見進程(visible)、次要服務(wù)(secondary server)、后臺進程(hidden)、內(nèi)容供應(yīng)節(jié)點(content provider)、空進程(empty)六種。 ⑴前臺進程是指一些系統(tǒng)進程和當(dāng)前屏幕上正在顯示的進程。比如說你打開Google地圖查找路線,此時Google地圖就是一個前臺進程。⑵可見進程則是那些雖然不在前臺,但是用戶依然可見的進程,如輸入法,時鐘等,這些進程雖然不是在前臺運行的,但是其存在和我們的使用卻是密切相關(guān)的,如果關(guān)閉了這些應(yīng)用程序?qū)⒔o我們的使用帶來非常大的不便⑶次要服務(wù)是一些與系統(tǒng)功能息息相關(guān)的服務(wù),如Google企業(yè)套件等。⑷后臺進程,可以這么說后臺進程就是一個前臺進程被另一個前臺進程替換后,進程沒有結(jié)束,但是已經(jīng)不再是前臺進程的一個狀態(tài)。在實際應(yīng)用中就是當(dāng)一個前臺進程運行時按HOME鍵后的進程狀態(tài)⑸內(nèi)容供應(yīng)節(jié)點是沒有程序?qū)嶓w,而是僅僅提供內(nèi)容給別的程序使用的比如說日歷節(jié)點⑹空進程是沒有任何東西在運行的進程,在一個程序退出后會有一個沒有任何數(shù)據(jù)和代碼在運行但是依然駐留在進程空間中的進程,該進程僅僅是作為一個能夠提高該程序下次啟動速度和記錄程序歷史記錄的進程。 Android在調(diào)度以上幾種進程時使用了一個系統(tǒng)值作為系統(tǒng)對進程的一個評估,當(dāng)要結(jié)束一個進程時該值的數(shù)值越大的進程被系統(tǒng)選中并結(jié)束的概率越大。一般的,前臺進程的值為0,這表明前臺進程不可能被系統(tǒng)選中并結(jié)束。當(dāng)進程進入后臺以后,系統(tǒng)將會分配一個更高的值給該進程。相對于Linux的最近最早未使用的調(diào)度策略,Android在其基礎(chǔ)上提供了一套獨特的進程管理模塊,他能讓程序員使用腳本來對內(nèi)存管理進行定制。比如當(dāng)內(nèi)存小于某個值時可以結(jié)束這個系統(tǒng)值大于另外一個值的進程,還可以當(dāng)內(nèi)存小某個值時結(jié)束上面六類進程中的一類(但順序必須是空進程,內(nèi)容供應(yīng)節(jié)點,后臺進程,次要服務(wù),可見進程,最后才是前臺進程)。根據(jù)這種特性 該系統(tǒng)值至少由兩部分組成,一個是基值,另一個根據(jù)LRU(最近最久未使用)調(diào)度算法產(chǎn)生的一個值。對于以上說的六種進程應(yīng)該分別有一系統(tǒng)給其賦予的值,其大小順序應(yīng)該是空進程大于內(nèi)容供應(yīng)節(jié)點大于后臺進程大于次要服務(wù)大于可見進程大于前臺進程,而這個系統(tǒng)賦予的值則是基值。這樣就能保證一些這六種進程總是當(dāng)一種進程被結(jié)束完了以后另外一種進程才會被結(jié)束,同時只需要根據(jù)這個系統(tǒng)值就能輕易做到對內(nèi)存管理的定制。 應(yīng)用程序框架層 在Android系統(tǒng)構(gòu)架圖中可以看到,應(yīng)用程序框架層是處于Android Runtime和庫函數(shù)層于應(yīng)用程序?qū)又g,之前的敘述中知道,該層使用開發(fā)語言的是Jav
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1