我為什么選擇Xamarin

Xamarin是一項(xiàng)跨平臺(tái)開發(fā)技術(shù)服赎,之前是收費(fèi)的葵蒂,而且據(jù)說(shuō)收費(fèi)不菲,所以使用的人數(shù)比較少重虑,在國(guó)內(nèi)幾乎無(wú)人問(wèn)津践付。后來(lái)Xamarin被微軟收購(gòu),現(xiàn)已免費(fèi)開放缺厉,相信今后國(guó)內(nèi)的使用人群會(huì)大幅地增長(zhǎng)永高,一方面是因?yàn)槊赓M(fèi)的東西總是受人歡迎的,另一方面是Xamarin確實(shí)提供了一種比較強(qiáng)大的技術(shù)來(lái)支持跨平臺(tái)開發(fā)(這里所指主要是Android和iOS上的開發(fā)提针,但其實(shí)不止于此)命爬。

如今市面上號(hào)稱可以提供跨平臺(tái)開發(fā)的方案很多,比如React Native辐脖、PhoneGap饲宛、IONIC等,這些方面大多數(shù)都是基于HTML和JavaScript等技術(shù)實(shí)現(xiàn)的跨平臺(tái)開發(fā)嗜价,在開發(fā)效率上自然是沒(méi)話說(shuō)艇抠,但是這些技術(shù)在性能上則遜色于原生的開發(fā)技術(shù)幕庐,而這恰恰是Xamarin得以生存的空間。

Xamarin聲稱可以獲得不差于原生技術(shù)的性能家淤,甚至在某些方面還有可能超越原生异剥,我想這指的應(yīng)該在是Android方面。我個(gè)人分析絮重,原因可能是這樣的冤寿。Xamarin使用C#進(jìn)行開發(fā)(好像用F#也可以,不過(guò)我沒(méi)有試過(guò)青伤,據(jù)說(shuō)F#也是一門非常不錯(cuò)督怜,以后有時(shí)間會(huì)學(xué)習(xí)學(xué)習(xí)),C#默認(rèn)方法是非虛的潮模,即在子類中要重寫方法亮蛔,必須在父類中聲明為virtual,而java默認(rèn)所有方法都是虛方法擎厢,所以C#可以減少這方面的開銷究流。其次的話,可能是微軟畢竟也是老牌的IT公司动遭,在系統(tǒng)軟件方面的優(yōu)化能力不容小覷芬探,手里的黑科技也是不少,敢說(shuō)這話應(yīng)該是有底氣的厘惦。當(dāng)然這不是最重要的偷仿,只要能夠在大多數(shù)情況獲得近似于原生的性能,便已是非常不錯(cuò)了宵蕉。

Xamarin主要有這么幾項(xiàng)技術(shù)酝静,Xamarin.Android、Xamarin.iOS和Xamarin.Forms羡玛,此外還有Xamarin.UWP别智、Xamarin.Windows、Xamarin.WinPhone等稼稿,但鑒于目前的市場(chǎng)占有率薄榛,后面幾項(xiàng)可以暫時(shí)不去理會(huì)。

無(wú)論是Xamarin.Android還是Xamarin.iOS让歼,本質(zhì)都是對(duì)原生API做了一層C#的封裝敞恋,因此在使用上與原生API會(huì)十分相似。這種封裝會(huì)結(jié)合一些C#的語(yǔ)法特性谋右,讓開發(fā)者可以享受C#的語(yǔ)法糖硬猫。其中Xamarin.iOS是直接編譯成ARM的二進(jìn)制代碼,因此執(zhí)行效率肯定是非常高的。與此不同啸蜜,Xamarin.Android被編譯成中間語(yǔ)言馏予,Xamarin在APK安裝包中會(huì)包含一個(gè)mono的運(yùn)行時(shí),代碼是在mono運(yùn)行時(shí)和安卓本地的運(yùn)行時(shí)上完成工作的盔性,可想而知,這中間需要付出一些開銷呢岗,而且會(huì)使安裝包體積增大許多冕香,但是考慮到設(shè)備的運(yùn)行空間和存儲(chǔ)空間都在高速增長(zhǎng),這也不能算是一個(gè)特別致命的缺點(diǎn)后豫。

而Xamarin最為關(guān)鍵的技術(shù)還不是上面的兩項(xiàng)悉尾,而是Xamarin.Forms。這項(xiàng)技術(shù)把IOS挫酿、android构眯、UWP等平臺(tái)的GUI進(jìn)行了一統(tǒng)地抽象,開發(fā)者只需要寫一套代碼早龟,編譯器會(huì)在編譯時(shí)將界面映射到原先控件上惫霸,從而獲得原生平臺(tái)的外觀和性能。這種做法對(duì)于開發(fā)者應(yīng)該是最喜聞樂(lè)見(jiàn)的葱弟,至少我是如此壹店,相比于那種運(yùn)行的虛擬層上的跨平臺(tái)方式,這種做法性能損耗最少芝加。當(dāng)然硅卢,損耗小并不代表沒(méi)有,官方也表示藏杖,Xamarin.Forms不適合用于開發(fā)圖形界面操作特別復(fù)雜且頻繁的應(yīng)用将塑。遇到這種情況,我們可以用Xamarin.IOS或Xamarin.Android來(lái)解決蝌麸,也就是說(shuō)Xamarin.Forms可以與Xamarin.IOS或Xamarin.Android在同一個(gè)項(xiàng)目結(jié)合使用点寥。就以我準(zhǔn)備使用Xamarin做輸入法為例,根據(jù)Xamarin的特點(diǎn)祥楣,我用Xamarin.Forms來(lái)做輸入法的設(shè)置界面开财,節(jié)省重復(fù)開發(fā)一套界面和業(yè)務(wù)邏輯的精力;而用Xamarin.IOS和Xamarin.Android來(lái)做輸入法界面误褪,以發(fā)揮最大的性能责鳍。目前從我實(shí)驗(yàn)的結(jié)果看,這個(gè)想法是可行的兽间。雖然我最開始的想法是連輸入法界面也用Forms來(lái)做历葛,但發(fā)現(xiàn)在輸入法界面無(wú)法使用Forms編寫的界面(根據(jù)我的實(shí)驗(yàn),F(xiàn)orms的界面應(yīng)該只能用于制作Activity的界面,而不能做Service的界面恤溶,也可能是我不知道應(yīng)該怎么實(shí)現(xiàn))乓诽,所以只好退而求其次,不過(guò)現(xiàn)在這個(gè)結(jié)果也是不錯(cuò)的咒程,畢竟輸入法界面本身對(duì)性能的要求就比較高鸠天,使用更接近原先代碼的技術(shù)自然要好一些。

至此帐姻,我使用Xamarin的意圖已經(jīng)很明顯了稠集,就是想要用于它實(shí)現(xiàn)一個(gè)跨平臺(tái)的移動(dòng)輸入法,具體的說(shuō)是歲寒輸入法〖⒋桑現(xiàn)在首先準(zhǔn)備做的是IOS版的剥纷,然后再反過(guò)來(lái)重寫Android版本,如果日后WindowPhone能有起色呢铆,并且開放第三放輸入法的權(quán)限晦鞋,那么基于這些代碼實(shí)現(xiàn)一個(gè)WindowPhone就不會(huì)是一件再起爐灶又大費(fèi)周章的事情。而如果使用原生語(yǔ)言開發(fā)的話棺克,那每個(gè)平臺(tái)都得重寫一套代碼悠垛,代價(jià)實(shí)在太大了,尤其對(duì)于個(gè)人開發(fā)者而言娜谊,不堪重負(fù)鼎文,這也是為什么Xamarin對(duì)我來(lái)說(shuō)特別有吸引力的原因。

跨平臺(tái)有跨平臺(tái)的方便因俐,自然也有跨平臺(tái)的難處拇惋,Xamarin也僅僅提供了一種跨平臺(tái)開發(fā)的手段而已,想要將這個(gè)手段發(fā)揮好抹剩,最大限度地實(shí)現(xiàn)對(duì)代碼的重用撑帖,則需要更高的技巧和更多的思考。因此我不推薦初入開發(fā)門道的人選擇Xamarin澳眷,在此之前胡嘿,最好對(duì)其中一個(gè)平臺(tái)及其開發(fā)過(guò)程有較深的理解。

Xamarin現(xiàn)在免費(fèi)開放钳踊,顯然這是微軟的移動(dòng)戰(zhàn)略的一部分衷敌,由于自身操作系統(tǒng)在生態(tài)環(huán)境上的欠缺,迫使微軟去推動(dòng)跨平臺(tái)技術(shù)的發(fā)展拓瞪,以希望從其它平臺(tái)上借勢(shì)缴罗,從而反哺自身。在我看來(lái)祭埂,微軟的移動(dòng)操作系統(tǒng)不太可能會(huì)有轉(zhuǎn)機(jī)面氓,但這不意味著Xamarin作為一項(xiàng)技術(shù)沒(méi)有希望。“有心栽花花不開舌界,無(wú)心插柳柳成蔭”的事情從不鮮見(jiàn)掘譬,只要抓住開發(fā)者這幫猢猻,微軟這棵大樹便不會(huì)倒呻拌,相信微軟明白這個(gè)道理葱轩,作為開發(fā)者也不必過(guò)于擔(dān)心微軟過(guò)河拆橋。

這篇文章的目的不純粹在于宣傳Xamarin技術(shù)藐握,畢竟微軟沒(méi)有給我發(fā)盒飯酿箭,但免費(fèi)用著人家提供的技術(shù),順便給人家宣傳宣傳的好事也是值得做的趾娃。其實(shí)我主要是想在此立個(gè)字據(jù),作為一個(gè)開始缔御,日后盡可能地把開發(fā)過(guò)程中得到的經(jīng)驗(yàn)和心得分享出來(lái)抬闷,既是一種記錄,也是一種鞭策耕突,以此自勉笤成。

一些鏈接

Xamarin主頁(yè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市眷茁,隨后出現(xiàn)的幾起案子炕泳,更是在濱河造成了極大的恐慌,老刑警劉巖上祈,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件培遵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡登刺,警方通過(guò)查閱死者的電腦和手機(jī)籽腕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纸俭,“玉大人皇耗,你說(shuō)我怎么就攤上這事∽岷埽” “怎么了郎楼?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)窒悔。 經(jīng)常有香客問(wèn)我呜袁,道長(zhǎng),這世上最難降的妖魔是什么简珠? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任傅寡,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荐操。我一直安慰自己芜抒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布托启。 她就那樣靜靜地躺著宅倒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屯耸。 梳的紋絲不亂的頭發(fā)上拐迁,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音疗绣,去河邊找鬼线召。 笑死,一個(gè)胖子當(dāng)著我的面吹牛多矮,可吹牛的內(nèi)容都是我干的缓淹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼塔逃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼讯壶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起湾盗,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伏蚊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后格粪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏吊,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年帐萎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颜阐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吓肋,死狀恐怖凳怨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情是鬼,我是刑警寧澤肤舞,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站均蜜,受9級(jí)特大地震影響李剖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜囤耳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一篙顺、第九天 我趴在偏房一處隱蔽的房頂上張望偶芍。 院中可真熱鬧,春花似錦德玫、人聲如沸匪蟀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)材彪。三九已至,卻和暖如春琴儿,著一層夾襖步出監(jiān)牢的瞬間段化,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工造成, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留显熏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓晒屎,卻偏偏與公主長(zhǎng)得像喘蟆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夷磕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,519評(píng)論 25 707
  • 介紹 最近出現(xiàn)的 React Native 再次讓跨平臺(tái)移動(dòng)端開發(fā)這個(gè)話題火起來(lái)了,曾經(jīng)大家以為在手機(jī)上可以像桌面...
    cosWriter閱讀 2,312評(píng)論 0 12
  • 無(wú)謂仔沿,無(wú)所求坐桩!呵呵,今天隨口問(wèn)了同事封锉,你可以做到?jīng)]所謂么绵跷。他悠然答到,當(dāng)然可以成福!我不信繼續(xù)追加碾局,不論什么事都可以。...
    再見(jiàn)一生閱讀 302評(píng)論 0 0
  • 突然好怕哪一天自己長(zhǎng)大到 一個(gè)人睡午覺(jué)到昏黃的光照進(jìn)房間 卻不再有爸媽工作回來(lái)開門的聲音
    珍珠女士的元寶先生閱讀 270評(píng)論 0 1
  • 每個(gè)人的心奴艾,都像上了鎖的大門净当, 任你再粗的鐵棒也撬不開。 唯有關(guān)懷蕴潦, 才能把自己變成一只細(xì)膩的鑰匙像啼,進(jìn)入你心中,了...
    畫欣閱讀 370評(píng)論 0 0