一個(gè)iOS開發(fā)者學(xué)習(xí)Android之路
“朝向黑暗的一面!”
最近我參加了一次Big Nerd Ranch在Banning Mills的Android訓(xùn)練營(yíng),這件事在Twitter上引發(fā)了一片錯(cuò)愕,因?yàn)槲乙恢北徽J(rèn)為是一個(gè)Objective C和Cocoa的腦殘粉,事實(shí)上我就是Big Nerd Ranch iOS訓(xùn)練營(yíng)的老師 。
參加Android訓(xùn)練營(yíng)的事曝光后讓我掉了好幾個(gè)粉絲。這是我整個(gè)人氣下滑故事的開始。
在Facebook的一段往事…
差不多一年前,當(dāng)時(shí)我在Menlo Park的Facebook總部教iOS 訓(xùn)練營(yíng)的課程,有一次下課后我遇到了一位我在Palo Alto工作的朋友Eduardo,他也是一位iOS開發(fā)者,不過最近他開始做一些“不好的事情”,他大部分的時(shí)間已經(jīng)在從事Android開發(fā)。那周他 剛好參加了Google I/O大會(huì),我不得不忍受幾小時(shí)關(guān)于Google炫酷技術(shù)的教化。雖然有點(diǎn)煩人,不過還是不會(huì)動(dòng)搖我的信念,尤其像我這樣”忠心”的人。
我們經(jīng)常在蘋果Cupertino總部門口的一家牛排館吃晚飯。雪上加霜的是,他每次進(jìn)入這家全是蘋果員工的餐廳時(shí)有一個(gè)很不好的習(xí)慣,那就是帶著……沒錯(cuò),谷歌眼鏡!我常常在想保安會(huì)不會(huì)把我們踢出去。
安德森先生,你不覺得這幅眼鏡很不合適么?
呆瓜混合體
面對(duì)現(xiàn)實(shí)吧:帶上谷歌眼鏡讓你看起來就像一個(gè)傻叉一樣…還是一個(gè)書***型的傻叉。我反抗了好幾天,***還是妥協(xié)了想要去試一下(當(dāng)然,我不是真的那么感興趣)。
在看了一圈周圍米有蘋果的保安之后,我迅速的戴上了它…人氣下滑是跑不了了。
我?guī)У倪@副絕對(duì)只是一副原型機(jī),雖然是一副原型機(jī)但是卻是我這幾年見過的唯一一副真實(shí)設(shè)備。老實(shí)說帶上它你真的不能看起來更傻了。這種原始的書***氣對(duì)某些同志可能會(huì)有不可抗拒的吸引力,帶上它看起來就像下面這位。
在我回家的路上為谷歌眼鏡開發(fā)應(yīng)用的想法突然闖進(jìn)了我的腦海。事實(shí)上幾年前我曾經(jīng)試過***代的Nexus,老實(shí)說這臺(tái)電話真的不是為我準(zhǔn)備的,它的 屏幕跟下面的塑料之間有一條缺口,每次用它打電話都會(huì)扯掉我的頭發(fā)。一部會(huì)讓我變成禿子的電話不值得浪費(fèi)我的時(shí)間,不過這副眼鏡嘛…
回到Banning Mills
如今我的行程表總是非常滿,讓我?guī)缀醪豢赡芡O聛碛脦字艿氖录W(xué)點(diǎn)新東西。不管你怎么努力,(分心)它總會(huì)偷偷的冒出來接近你。
在Banning Mills,一只山獅(Mountain Lion)正在毫無防備的機(jī)器人(Android)上方掠食…
在看過了我瘋狂的日程表后,Hillegass醫(yī)生給出了他的藥方:在喬治亞州的鄉(xiāng)下進(jìn)行一周的全浸式Android培訓(xùn)。
雖然每天要學(xué)習(xí)10到12個(gè)小時(shí),這個(gè)訓(xùn)練營(yíng)感覺卻像一次短途旅行:沒人打斷,沒有電話,沒有郵件。在Big Nerd ranch訓(xùn)練營(yíng),你可以只專注一件事情:學(xué)一些“書***”的東西。
我估算了一下在Banning Mills與我的Android同學(xué)以及我們的導(dǎo)師Kristin Marsicano共度的一周 ,起碼節(jié)省了我三周自學(xué)的時(shí)間。最重要的是我有機(jī)會(huì)從緊張的行程里得到一絲喘息,從這點(diǎn)來看就很值了。
iOS開發(fā)者眼中的Android
學(xué)習(xí)安卓的過程讓我有些意外,因?yàn)槲乙恢币詾樗械沫h(huán)境會(huì)很相似。畢竟,iOS與Android系統(tǒng)都是基于Unix,兩者的開發(fā)語(yǔ)言也都是基于C的。可惜事實(shí)并非如此。
Android有一個(gè)特殊的并且十分有趣的特性,和我之前所見過的其他OS都不同。在iOS中包括幾乎其他所有的OS,應(yīng)用是整個(gè)系統(tǒng)中最基本的交 互單元。但在Android上不是這樣。它的基礎(chǔ)交互單元叫做Activity,有點(diǎn)類似iOS中UIViewController的概念。
不同應(yīng)用中的Activity可以獨(dú)自通信因此可以變成你的應(yīng)用的不同入口。所以當(dāng)你想要完成一項(xiàng)任務(wù),比如在郵件中添加一幅照片,你可能會(huì)用到好 幾個(gè)Activity(郵件Activity和其他應(yīng)用的Photo Activity)。一個(gè)設(shè)計(jì)良好的Android應(yīng)用可以很好的融入到OS之中,變成一套松耦合的Activity。是不是棒極了?
不過相比iOS中UIViewController的通信,Activity間的通信要復(fù)雜得多。通信行為被封裝在一個(gè)叫做intent的類中。這種通信機(jī)制讓我想起了當(dāng)年Windows統(tǒng)治地球的時(shí)候,和利用CORBA訪問分布式對(duì)象的方法很類似。
Activities和Fragments(和Activity類似的一種概念)在屏幕上組織的方式也與iOS很不一樣,對(duì)于一個(gè)新手,你會(huì)發(fā)現(xiàn)根本沒有類似UINavgationControler的東西,整個(gè)系統(tǒng)已經(jīng)是一個(gè)Activity的棧結(jié)構(gòu)。
來學(xué)Android把,騷年,這里有餅干!
Android Studio, Big Nerd Ranch的書還有餅干。
不過最驚奇的是Android的語(yǔ)法比iOS要啰嗦不少。尤其當(dāng)一個(gè)iOS開發(fā)者跟你說這東西很啰嗦,你***把這當(dāng)回事!一個(gè)最要的原因是 Android SDK沒有將一些行為抽象出來,比如你在iOS新建一個(gè)UIViewController時(shí),你不用去給它指定xib文件的名字,除非你在做什么詭異的操 作。否則UIViewController會(huì)自己去尋找和自己同名的xib文件,在Android中,你只有手動(dòng)去指定每一個(gè)布局文件,一遍又一遍。
從這里你可以看出你可以把你在一個(gè)平臺(tái)中學(xué)到的東西帶到另一個(gè)平臺(tái)之中。iOS開發(fā)者也可以從Android的布局技巧中有所收獲,用來彌補(bǔ)Cocoa中AutoLayout的不足。
作為一個(gè)iOS開發(fā)者最讓我想念的就是一門不將就的語(yǔ)言(對(duì)不起,情不自禁),還有blocks,Core Data。
兩者兼?zhèn)?/strong>
學(xué)習(xí)Android的過程讓我成為了一個(gè)更好的iOS開發(fā)者,也讓我有機(jī)會(huì)以一個(gè)全新的視角來審視移動(dòng)開發(fā)。了解兩個(gè)平臺(tái)的技術(shù)讓我成為了一個(gè)更好的移動(dòng)開發(fā)人員。
無路可退:我是一個(gè)有證的Android開發(fā)者了。
如果你是一位業(yè)余開發(fā)者,你可以選擇忽略其中一種平臺(tái),但是作為一名職業(yè)開發(fā)者,無論對(duì)于你的職業(yè)生涯還是公司的商業(yè)角度掌握兩個(gè)平臺(tái)的技術(shù)都具有重要意義,不管你是不是偏愛其中的一方。
因此,如果你是一個(gè)iOS開發(fā)者,你可以繼續(xù)開關(guān)于Android的玩笑,但是你還是應(yīng)該去學(xué)習(xí)它。如果你是一個(gè)Android開發(fā)者,來加入我們體驗(yàn)一下另一種世界:我們保證不會(huì)嘲笑你們夸張的“電話板”的。我保證。
你知道為什么Android平板的市場(chǎng)占有率不重要么,應(yīng)為他們都算是手機(jī)!…
原文鏈接: Fernando Rodriguez Romero 翻譯:袁欣
譯文鏈接: http://blog.jobbole.com/68744/