Java程式設計師轉Android開發必讀經驗分享

devstore發表於2015-06-24

  小編最近幾日偷偷的發現部分Java程式設計師想轉安卓開發,故此加緊補充知識,為大家蒐集資料,積極整理前人的經驗,希望可以給正處於困惑中的你,帶來些許的幫助。

Java程式設計師轉Android開發必讀經驗分享

  囉哩囉嗦的說說Java和Android程式的區別:

  Android是主流智慧手機的作業系統,Java是一種開發語言,兩者沒有好壞優劣之分,只是兩種職業崗位的選擇。學安卓從事移動互聯方向開發,學Java從事軟體、網站開發。而安卓上的應用大多是Java編寫的,所以建議在安卓前期的Java學習階段中,要用心學好。

  言簡意賅的說說“轉”前的準備:

  其實Java程式設計師要自學安卓開發的基礎知識還是沒有什麼難度的,畢竟語言相通,特性相似,閱讀安卓原始碼的門檻以比較低一些,作為能夠考慮“轉”的合格的程式設計師的你,自學能力和相關的基礎知識應該不是問題,學習安卓也相對比較輕鬆一些。

  所以Java程式設計師轉安卓開發可以看做是一次“增量更新”,只需要學習一下安卓的基本元件:Activity、ContentProvider、Service、BroadcastReceiver;

  瞭解一下安卓中的Intent,Handler,Adapter以及各類事件的傳遞方式(onClick,onTouch等);

  同時輔助一定的程式碼量,像JNI、AIDL什麼的都可以看一下;

  你還要摒棄“UI元素畫素位置”這個概念,安卓本身是允許通過設定元素位置來製作UI的,如果你這樣做導致的結果便是大批機器不適配,那麼顯示效果就有點慘不忍睹了,所以不要妄想通過獲取螢幕大小來調整UI,像LinearLayout在swing或者swt上可有可無的東西,在安卓上是必須要精通的。

  還有熟悉ide,安卓提供的開發框架、Java及其他程式設計知識等。

  當然,小編在此說的只是九牛一毛,還有很多在開發過程中需要注意的細節問題是我們沒有提到的。

  下面小編跟大家分享一下前人關於技術開發轉移動應用開發的經驗,希望對大家有借鑑的作用:

  劉鐵峰,海豚瀏覽器CTO

  因為具體的開發場景不一樣,目標的讀者的經驗也各不一。分享一點轉型過程中,所需要補充的知識點和邏輯上的轉變。

  移動開發和PC上的開發帶來了哪些不一樣?

  在我看來,從2002年之後,傳統桌面的開發者基本都轉向了J2EE/.NET/LAMP等以Web技術或者伺服器端開發技術為主的開發方式。使用C/C++/MFC/Delphi等開發C/S模式的使用者越來越少,甚至工作的需求也開始變得越來越少。

  這樣在技術體系上,開發者的經驗開始基本上覆蓋在:

  1.HTML + CSS + JavaScript

  2.各種指令碼語言(PHP/http://ASP.NET/JSP/Python/Ruby)操作伺服器API

  3.伺服器資料處理邏輯(O/R Mapping, 資料庫連線池,各種如AOP等設計模式,甚至DSL等等)

  4.大型伺服器的架構設計(分散式架構,各種負載均衡,伺服器連線優化)

  5.資料庫(分散式資料庫,事務處理,大規模資料的儲存、查詢優化)

  6.大資料處理(Hadoop, Hive)等等。

  那對於移動開發上需要什麼?

  不管是Android / iOS /WP , 其實對於開發的需求上逐漸回到了2002年之前,大概類比MFC/Delphi的時代,更加合適。

  移動開發者的技能需求發生了轉變,需要的經驗變成了:

  充分理解各移動平臺的程式架構和程式生命週期邏輯(程式啟動,程式被系統suspend/kill, Services)

  1.介面設計(各種UI控制元件,事件處理)

  2.資料處理邏輯(客戶端快取、多執行緒併發)

  3.網路資料處理

  4.平臺相關特性(系統API呼叫,系統通知機制等)

  5.各種效能處理。

  因此,在學習的路線和需要的經驗上有了不同。

  如果需要從非移動開發者往移動開發者進行轉型,哪怕同樣使用的是Java語言,需要的就是了解不同的庫以及處理不同領域的具體問題。

  在移動裝置的開發上,我歸結為三大類問題:效能的問題,介面響應的問題,產品的穩定性。這些是技術人員可以需要最為注意和保障的。

   季逸超,Peak Labs創始人

  記得當時iPhone出來後,讓人們看到了一個與傳統的“視窗”完全不同概念的邏輯:介面方面一個應用佔滿整塊螢幕,程式方面程式碼也都是在嚴格的沙箱內執行。當時我就意識到這將是一整套全新的規則體系,後來漸漸從表面往深層看,寫了幾年爛程式碼慢慢我也有了點心得:

  1.淡化檔案的存在,而凸顯應用和工作流。

  2.儘量避讓主執行緒/UI執行緒,避免鎖介面。因為桌面應用鎖UI的話只不過是一個視窗,而移動應用會給人感覺是“手機”這個整體掛了...

  3.能迅速完成的操作/運算就不要指望後臺,自己的程式隨時可能被kill掉。後臺只留給VOIP、網路操作之類的。

  4.儘量加快啟動速度。移動產品用的頻繁,但單次使用遠比桌面要短,所以不要出現Photoshop那樣讓使用者傻等的情況。即使用個“假象”也要讓使用者覺得啟動挺快的。

  5.同一個功能最好有多種互動/操作方式。不像Windows一統桌面江湖,現在各個版本的android、iOS使用者之間使用習慣迥異,最好能讓人們的習慣都能work。

  6.最好不要讓UI控制元件太顯眼(比如街機遊戲中碩大的搖桿遮住了人物),但也別太隱晦(猛獁瀏覽器4,哈哈哈)。

  7.使用者其實很在意耗電和發熱量,桌面使用者從不在乎…

  8.很多功能別人說做不到或說平臺不允許不開放的時候,總有人用匪夷所思的奇葩手段實現了…

  個人拙見請勿輕信哈~

  王思達,愛安卓,愛刷機,愛移動網際網路

  從桌面端轉向移動端,一定要認識到二者不同的側重點。桌面端包括web更側重於邏輯複雜,高階的任務,而移動端的娛樂性明顯更強。

  就從操作方式說起吧,桌面端主要靠滑鼠鍵盤和touchpad,所以操作精度要高得多,很容易將很多功能整合到一個介面裡;但同樣的思路就完全不適用於移動端了 (反例我是實在想不起來了,大家可以幫忙想想),相信一個cluttered ui的app,就算功能再強大,使用者盯著你的介面超過3s就會頭暈,點選某個button要點好幾下才會成功,也必定是一個糟糕的app。

  那什麼樣的操作方式是適用於移動端的呢?

  ListView的滑動操作就是一個很好的例子,不需要使用者任何的思考,只需順著期待的內容出現的方向滑動,這樣 intuitive的設計便是王道。類似的設計還有來自Tweetie的下拉重新整理,Android 4.0引入標準庫的ViewPager等等。上述的操作都有一個共同特點——手勢操作。既然移動端(不管是手機還是平板)是拿在手上的裝置,那手勢操作成為其殺手鐗就毫不奇怪了,自然也就成了區分移動端和桌面端的一個重要特質。PeakJi大神的猛獁瀏覽器和輸入法(忘記名字了)同樣也體現了這一點。

  有了簡單直觀的手勢操作,還有一個不得不提的feature——push notification。使用者很懶,一臺機器裝了上百個app,可能一個月你的app也就被開啟一兩次,這當然不是你希望看到的。如果你的app是網站客戶端性質的,那麼push notification就是一個很好地利器了。怎麼做呢?我總結了下面的流程:

  1. 與社交網路連線,獲取使用者資料,分析使用者興趣

  2. 記錄使用者在你的網站或客戶端的使用習慣,逐漸逼近使用者真正的興趣

  3. 根據得到的使用者興趣,推送他感興趣的內容

  可以看到,不僅僅是“通知”那麼簡單,像新浪微博那樣的,一天一條的palm news,多了只能讓人感到annoying,並不能起到和使用者很好的溝通的效果;只有推送使用者感興趣的內容,才會引起他們的注意,增加你的app在使用者心中的權重。

  最後一點我認為很重要的,就是consistency,和作業系統要保持操作習慣的一致性。比如左上角的返回button,Android 4.0的ViewPager滑動換標籤等,這樣做最大的好處就是降低了使用者的學習成本,讓你的app和OS融為一體。當然在OS的大框架下,也不乏有新意的app,比如Android下的一款類siri應用Maluuba,大膽地採用了Metro風格的設計,但操作起來並不會覺得陌生,最大的原因就是 ViewPager的滑動操作被保留了下來。

  以上是各位前人的一些經驗,大家可以根據自己的情況吸收消化,下面快送一些可以幫助到大家的書籍:

  推薦一:Head First Java(中文版)(第2版)(涵蓋Java5.0)

  推薦理由:安卓應用層和大部分framework層用的都是Java語言。

  推薦二:瘋狂Android講義

  推薦理由:知識點比較全,也比較新。

  推薦三:深入理解Android(卷1)

  推薦理由:作者的文筆流暢,見解獨到,而且系統地,深入地講解了Android系統原理。同時作者那種層層遞進,抽絲剝繭式的分析模組的手法也非常值得學習。

相關文章