小編最近幾日偷偷的發現部分Java程序員想轉安卓開發,故此加緊補充知識,爲你們蒐集資料,積極整理前人的經驗,但願能夠給正處於困惑中的你,帶來些許的幫助。php
囉哩囉嗦的說說Java和Android程序的區別:html
Android是主流智能手機的操做系統,Java是一種開發語言,二者沒有好壞優劣之分,只是兩種職業崗位的選擇。學安卓從事移動互聯方向開發,學Java從事軟件、網站開發。而安卓上的應用大可能是Java編寫的,因此建議在安卓前期的Java學習階段中,要用心學好。android
言簡意賅的說說「轉」前的準備:程序員
其實Java程序員要自學安卓開發的基礎知識仍是沒有什麼難度的,畢竟語言相通,特性類似,閱讀安卓源代碼的門檻以比較低一些,做爲可以考慮「轉」的合格的程序員的你,自學能力和相關的基礎知識應該不是問題,學習安卓也相對比較輕鬆一些。web
因此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系統原理。同時做者那種層層遞進,抽絲剝繭式的分析模塊的手法也很是值得學習。