天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Android隨想

初步接觸Android,自己嘗試做了幾個DEMO,感覺到很興奮。剛剛翻開書的時候,看到Android的五個部件,加上一些文字的描述,感覺很抽象,似乎這個程序不好開發(fā),當(dāng)我開始動手做了第一個demo之后,就深深的被Android的開發(fā)模式吸引了,個人理解是按照Android的開發(fā)模式開發(fā)了之后放到Java編譯器,然后再經(jīng)過DX編譯器編譯最后簡單的部署到手機上。我曾是一個Web開發(fā)工程師,非常熟悉基于C#的網(wǎng)絡(luò)開發(fā),也曾經(jīng)接觸過普元的SOA開發(fā),其實他們之間都有一些類似之處。ASP.NET也是將ASPx先轉(zhuǎn)為C#的代碼然后轉(zhuǎn)換到MSIL中去,普元的SOA是自己擴展了Eclipse的插件,然后把一些編程模式放到工具去,通過普元的解釋器解釋成Java代碼然后轉(zhuǎn)換成字節(jié)碼,但是這個解釋器做的相當(dāng)不完善,同時Java的中間編譯經(jīng)常出錯,而且速度還跟不上來。

手機是一種特殊的設(shè)備,因為它資源的有限性,使得它運行的程序都有很大的限制,開發(fā)程序的時候必須考慮到它的硬件。以Sun為主的Java陣營提出了J2ME的開發(fā)模式,充分的考慮了開放性和兼容性,于是廣博的胸懷得到了業(yè)界的認可,但是卻沒有得到業(yè)界的大力推動,J2ME僅僅是附屬于各大手機操作系統(tǒng)的一個小產(chǎn)品,它的功能僅僅在提供非主流的程序應(yīng)用,并不是工程師們不想去做,而是他天生就是作為一門錦上添花的工具來設(shè)計的,http://rgruet.free.fr/public/BD-J/,因為Java本來就是設(shè)計在一個沙箱里頭的,所以J2ME只能獲得有限的能力,不管是CLDC1.0還是CLDC1.1,區(qū)別只在CLDC支持浮點數(shù)運算,以及支持浮點數(shù)運算的相關(guān)的方法的支持,盡管MIDP的出現(xiàn)能夠使得圖形圖像的變化變得更加容易,更加適合做游戲,但是還是無法變成主流的MMI的開發(fā)語言。

由于本人對MMI的基礎(chǔ)才剛剛開始,對MMI的理解還不夠深刻,但是覺得Java手機MMI的出現(xiàn)還是不太現(xiàn)實的,因為畢竟Java的執(zhí)行還必須有一個VM的支持,一般來說這個VM是獨立于手機操作系統(tǒng)的,本來手機的操作系統(tǒng)就很受局限,主要有多任務(wù)的操作系統(tǒng)和非多任務(wù)的操作系統(tǒng),有的可能是簡單的任務(wù)調(diào)度系統(tǒng),在這樣的機器上就不可能對VM以及Java有太多的幻想。

現(xiàn)在出現(xiàn)的主流的智能手機的操作系統(tǒng)像Nokia的Symbian,MS的Windows Phone/Windows Mobile,Plam的PlamOS,Moto使用的ucLinux,BlackBerry的blackberry,IPhone的mac,Android大系的Android系統(tǒng)大部分是基于C/C++來開發(fā)的,MMI似乎都沒有用Java的,這就是由于主流的Java移動開發(fā)的天生的定義而導(dǎo)致的。無論是智能機還是非智能機,對于Java的描述都是Java擴展,這個擴展就意味著Java不能登大雅之堂。結(jié)合我們對Java的用戶體驗來說,Java程序的用戶體驗一般來說都是比較糟糕的,就移動開發(fā)而言,每次運行Java程序,都需要一個較長的加載時間和退出的時間,相比起其他程序,這在用戶體驗中就相當(dāng)?shù)牟焕矣龅疆惓5氖强偸沁旬?dāng)一下就彈出一個莫名的窗口死掉了,這樣的人機交互是相當(dāng)糟糕的。

這或許跟Sun推行的Java策略在市場上不太好的緣故,對Java缺乏一個大的愿景,不斷的有組織開會提議加一個JSR,然后就費了很長時間制定一個JSR,而且這個JSR往往在敲定的時候又已經(jīng)落伍了。前段時間看到一幅漫畫,心中真是難受,那幅漫畫說的是Duke(Java的吉祥物,有個紅鼻子的小家伙)站在Sun的墓碑前掉淚。雖然Java作為現(xiàn)在最廣泛使用的編程語言,就移動這一塊來說,真的很有局限。

操作系統(tǒng)和VM的結(jié)合是Java受阻的原因之一,.NET戰(zhàn)略的優(yōu)勢也在于在Windows Mobile里頭有一個很好的CLR。或許你有一個這樣的用戶體驗,在Windows上運行的程序,Java寫的往往要感覺比.NET寫的運行得慢,就是因為CLR是對操作系統(tǒng)和硬件做了優(yōu)化的,而JVM必須支持通用的操作系統(tǒng)和通用的硬件,毫無疑問地說,Eclipse是一個非常優(yōu)秀的使用Java來寫的IDE。因此MS的Windows Mobile的優(yōu)勢在于,只要.NET Framework有什么新的東西,對應(yīng)的CF就有新的東西,而且Windows的UI已經(jīng)讓人非常習(xí)慣了。

對于Java來說,除了Sun推出一個Solaris的移動版,有可能會使得Java變成手機移動開發(fā)的主力軍,但是他沒有。所以希望Symbian,ucLinux去完成這件事,事實證明,這個使命沒有完成。就用戶體驗來說,對于許多中低端的用戶會非常喜歡Nokia,就一個終端用戶而言,不期待能用手里微薄的工資買一個iPhone,Nokia的高端機,Nokia的市場戰(zhàn)略非常出色,就我自己而言,用過幾大牌子的手機,最后還是愿意情歸Nokia,就是因為它的MMI做的人性化。從網(wǎng)上的消息得知,Android的機器的售價應(yīng)該是iPhone的一半,或者還能有所下降,相信它的市場會因為它友好的MMI見長。

Android在MMI開發(fā)中引入了Java,這個時候的Android并沒有拘泥于J2ME的一些死板的JSR,構(gòu)建在Linux上的Android使用了一個相當(dāng)優(yōu)秀的操作系統(tǒng),就內(nèi)核而言Linux無疑是業(yè)界承認是相當(dāng)穩(wěn)定的。見網(wǎng)上的一篇帖子,說有公司對比了Android內(nèi)核和標(biāo)準的2.6.25版本的Linux內(nèi)核,發(fā)現(xiàn)了Google修改了75個文件,增加了88個文件,該公司還對這些文件都做了對應(yīng)的注釋,其中為Glodfish增加了44文件,這個是虛擬機的虛擬CPU,模仿的是ARM926t;為YAFFS2修改了35個文件,因為增加了對NANDFLASH的支持;為藍牙修改了10個文件;為調(diào)度器修改了進程調(diào)度和時鐘相關(guān)策略,5個文件;為Android的新子系統(tǒng)增加了28個文件,有IPC Binder,運行的進程能為其他進程提供服務(wù),這個功能已經(jīng)在Plam的軟件里被使用了;Low Memory Killer是在內(nèi)存緊張的時候根據(jù)策略關(guān)閉某些程序的功能,內(nèi)核有實現(xiàn),Google重寫了;Ashmem,匿名共享內(nèi)存,多個程序可以使用這個共享內(nèi)存獲取信息;RAM Console and Log Device,Android增加的日志模塊;Android Debug Bridge,Android的調(diào)試工具;還有Realtime clock,timed GPIO等;Google還重寫了電源管理,文檔說,這個是最復(fù)雜難度最高的一個功能,放棄了APM、DPM;此外還有36個文件被修改了,設(shè)計Android的許多小功能。不過因為Android的內(nèi)核屏蔽了太多的硬件驅(qū)動,會對很多Linux的硬件企業(yè)造成堡壘,Linux的內(nèi)核維護者宣布將Android核心代碼從Linux內(nèi)核中刪掉,同時很多企業(yè)正試圖從他們的代碼庫中去除Android的代碼。因此,Android的發(fā)展也不是一帆風(fēng)順的,但是它漂亮的MMI是各大廠商都不愿意放棄的,因為實在沒有多少個廠商能做到這樣的一個系統(tǒng)而且還開源,縱然有缺點,我們也要包容這個可愛的綠色機器人。

 

一個強大的內(nèi)核支持下的手機操作系統(tǒng),相當(dāng)?shù)慕眩辽僭诘讓邮窍喈?dāng)?shù)膹妷选W屑氂^察Android的架構(gòu)圖,藍色的部分是用Java來寫的,綠色的部分使用C/C++來寫的,紅色的部分是采用C來寫的,黃色的部分是采用Dalvik虛擬機來寫的。看Libraries是和Android Runtime在同一層,而且Android Runtime和Linux Kernel是沒有交集的,而是直接嵌入到Libraries的。我猜想,Android Runtime的Core Libraries,應(yīng)該是利用native關(guān)鍵字引用Libraries的C/C++的函數(shù),通過Dalvik虛擬機再編譯完后調(diào)用Libraries的函數(shù)。經(jīng)過我對源碼的閱讀,的確發(fā)現(xiàn)有許多標(biāo)有native關(guān)鍵字的方法。不得不相信Dalvik是一個非常優(yōu)秀的虛擬機,否則是不足以完成這些工作的。

Dalvik虛擬機是Google的Android團隊的工程師設(shè)計的,和傳統(tǒng)的JVM不一樣的是,Dalvik虛擬機是基于寄存器的架構(gòu),而普通的虛擬機用的是基于棧的架構(gòu)。在這里穿插一下虛擬機的設(shè)計方法,虛擬機既然被稱作機器,就是因為其輸入時滿足某種命令集架構(gòu)的指令序列,中間轉(zhuǎn)為某種指令集架構(gòu)的指令序列并加以執(zhí)行,主要分為基于寄存器的設(shè)計和基于棧的設(shè)計,現(xiàn)在出現(xiàn)的大部分的虛擬機采用的都是基于棧的設(shè)計,虛擬機模擬的是硬件,從硬件來看,現(xiàn)在的CPU采用的都是基于寄存器的設(shè)計,其實也就是說采用寄存器的設(shè)計是有優(yōu)勢的,但是為什么虛擬機都不采用寄存器的設(shè)計呢?首先,使用基于棧的架構(gòu)的話,指令會變得簡單,不需要考慮指令中的源寄存器和目標(biāo)寄存器,不需要考慮為臨時變量分配空間,求值的時候開辟棧空間就好了;此外,使用基于棧的架構(gòu)用的是零地址指令,這樣的話比其他的指令形式更緊湊,節(jié)省資源;另外,考慮到移植性,即使是基于寄存器的架構(gòu)的CPU,寄存器的個數(shù)也不一樣,32位X86的通用寄存器就只有8個,而32位的ARM處理器就有16個通用寄存器,然而SPARC卻有24個通用寄存器。假使一個虛擬機采用基于寄存器的架構(gòu),為了高效執(zhí)行一般會希望把源架構(gòu)的寄存器映射到實際機器的寄存器上,如果源架構(gòu)的寄存器比實際機器的寄存器要多的話,寄存器就不能一一映射了,效率上肯定打了折扣,然而使用基于棧的架構(gòu)的話,在實現(xiàn)虛擬機的時候就比較好分配實際機器的寄存器,作為優(yōu)化,基于棧的虛擬機可以采用編譯的方法實現(xiàn)。

Dalvik虛擬機的許多設(shè)計是考慮到與JVM的兼容性的,采用了基于寄存器的架構(gòu),指令碼采用二地址和三地址混合形式,目標(biāo)機器架構(gòu)明確,主要是針對ARM處理器的支持,ARM9有16個32位通用寄存器而Dalvik虛擬機也是用16個虛擬寄存器,因此它也不需要考慮很多可移植性的問題,優(yōu)先考慮在ARM9上以高效的方法的實現(xiàn),這個戰(zhàn)略和微軟的技術(shù)戰(zhàn)略是非常象的。

看以下代碼:

public class Demo {  

    public static void foo() {  

        int a = 1;  

        int b = 2;  

        int c = (a + b) * 5;   

    }  

經(jīng)過Javac的編譯后,可以看到Demo.class的foo()的代碼是:

0  iconst_1

     1  istore_0 [a]

     2  iconst_2

     3  istore_1 [b]

     4  iload_0 [a]

     5  iload_1 [b]

     6  iadd

     7  iconst_5

     8  imul

     9  istore_2 [c]

    10  return

接著使用Android SDK的tools目錄里頭的工具dx工具,這里是SDK的tools不是根目錄的tools文件件,這個DX工具可以是Android 1.5/1.6/2.1的,使用DX工具來講Demo.Class轉(zhuǎn)化為dex格式,轉(zhuǎn)換的時候可以直接以文本的形式dump出dex的內(nèi)容,使用下面的命令:

dx --dex --verbose --dump-to=Demo.dex.txt --dump-method=Demo.foo --verbose-dump Demo.class  

可以看到foo()的字節(jié)碼是:

0000: const/4       v0, #int 1 // #1  

0001: const/4       v1, #int 2 // #2  

0002: add-int/2addr v0, v1   

0003: mul-int/lit8  v0, v0, #int 5 // #05  

0005: return-void  

另外Dalvik的.dex問價在未壓縮的狀態(tài)下的體積通常比同等內(nèi)容的.jar問價在deflate壓縮后還要小,但是光從字節(jié)碼來看,Java的字節(jié)碼總是要比dex的小,這主要是.dex使用了共享的常量池,使得相同的字符串?dāng)?shù)字常量只會出現(xiàn)一次有效的壓縮了文件的大小,不過在JSR200也提到了這樣的壓縮方法。

回到五彩斑斕的Android架構(gòu)圖上,剩下的兩層都是純藍色的,一層是Application Framework,一層是Applications。我們經(jīng)常說的使用Eclipse結(jié)合ADT開發(fā)的是Applications層,它的開發(fā)模式和眾多的功能是由Application Framework來支持的,我猜想應(yīng)該這兩層就是Android的MMI了吧,這兩層都是純Java來開發(fā)的,這兩層的資料相當(dāng)?shù)亩唷?yīng)該贊嘆一下這個框架,因為這個框架下的人機交互相當(dāng)?shù)挠押茫雌饋碜屓速p心悅目,雖然很多公司都在做手機的MMI,能做得如此人性化的真的很少,而且還無私的開源。另外值得一提的是,這個框架的源代碼是開源的,但是要通過Git和repo來獲得,repo必須在linux環(huán)境執(zhí)行,因為repo是個shell文件,至于Git有Windows版本的,但是在公司我下載了很久都無法連接上,不知道是不是由于公司的網(wǎng)絡(luò)管制比較嚴格的緣故。說起網(wǎng)絡(luò)的問題,Android模擬器的上網(wǎng)我也遲遲沒有弄成功,使用了網(wǎng)上說的三種方法都不成功,加上平時使用的經(jīng)驗發(fā)現(xiàn),除了IE,好像其他程序都無法連到外網(wǎng)。使用網(wǎng)上下載的源碼包可以在開發(fā)程序的時候看到框架的源代碼,但是網(wǎng)上的源碼只更新到2.0版本,一直傳聞Google沒有對2.1進行開源。從網(wǎng)上下載的代碼也不過只有20來兆大小,但是這20多兆的代碼沒有辦法在Eclipse里頭編譯,只能在Linux下編譯,聽說編譯的臨時文件非常大。由于沒有辦法拿到源碼和參與預(yù)編譯的文件,我也無法驗證這一說法的真?zhèn)巍R驗樵赪indows里頭搭建編譯環(huán)境也不是沒可能的,已經(jīng)有高人,使用Windows的環(huán)境模擬Linux的來編譯了Android的模擬器,這個模擬器的最新代碼無法獲得,只能獲得之前的一個舊版本,我拿回來之后,按照高人的方法去編譯,果然出現(xiàn)高人說的一些問題,但是高人把編譯好的模擬器截圖,并說明要最新的代碼。

最后說說這個開發(fā)模式,因為這是純Java的MMI,這個時候的Java就可以大顯身手,沒有J2ME的局限,也沒有沙箱,這給了Java很大的空間。由于本人之前開發(fā)過較長時間的Web程序,發(fā)現(xiàn)了很多很熟悉的地方,使用XML來布局可以類比JSP里頭的Html布局,使用AndroidManifest.xml來做配置文件,就像J2EE里頭的web.xml一樣規(guī)定著什么可以運行,如何去運行,還有一個自動生成的管理資源的R文件就像ASP.NET里頭自動生成的代碼,呈現(xiàn)和業(yè)務(wù)的分開,另外使用了SQLite,就如同在Web開發(fā)的數(shù)據(jù)庫開發(fā)一樣,和Web開發(fā)不同的是,Android應(yīng)用開發(fā)有獨特的Service組件和Intent的消息傳遞。這樣的開發(fā)模式的好處在于每個程序都有相當(dāng)大的獨立性,而且程序之間是非常平等的,這個很重要,在J2ME里頭,Java程序和其他程序可不是平等的,如果你愿意,你可重寫Android的每一個應(yīng)用程序,包括撥號,短信息,聯(lián)系人等等,也給了開發(fā)人員相當(dāng)大的自由度。另外,AndroidJava開發(fā)使用了很多Java5的新特性,也大大的加速了Java程序的開發(fā)。

it知識庫Android隨想,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 我与恶魔的h生活ova | 久久免费看少妇高潮A片JA | 第四色男人天堂 | 先锋影音av最新资源 | 玩弄朋友娇妻呻吟交换电影 | 午夜精品久久久久久久99蜜桃 | 久久精品视频在线看 | 久久re这里视频只精品首页 | 天天躁日日躁狠狠躁中文字幕老牛 | 亚洲国产精品免费观看 | 国产婷婷综合在线视频中文 | 亚婷婷洲AV久久蜜臀无码 | 日日摸夜添夜夜夜添高潮 | 蜜桃色欲AV久久无码精品 | se01短视频在线观看 | 34g污奶绵uk甩奶 | 色综合99久久久国产AV | 亚洲中文字幕乱倫在线 | 美女张开腿露出尿口扒开来摸动漫 | 国产人A片在线乱码视频 | 宝贝好紧好爽再搔一点试視頻 | 91福利在线观看 | 亚洲AV午夜福利精品香蕉麻豆 | 美女不要啊 | 最新亚洲中文字幕在线观看 | 卫生间被教官做好爽HH视频 | 电影日本妻子 | 91国内精品久久久久免费影院 | 久久久乱码精品亚洲日韩 | 诱受H嗯啊巨肉舍友1V1 | 在线看无码的免费网站 | 亚洲免费在线 | 久久精品在现线观看免费15 | 污污又黄又爽免费的网站 | 99久久99久久精品免费看子 | 中文字幕人成人乱码亚洲影视 | 99久久精品国产高清一区二区 | 亚洲一区二区三区高清网 | 精品国产福利一区二区在线 | 亚洲一二三产品区别在哪里 | 亚洲综合免费视频 |