很多朋友都對學習路線問題感到迷茫,特別是還在上學的朋友們。在這里就詳細的為大家介紹一下。
1.Java基礎
很多朋友一上手就開始學習Android,似乎太著急了一些。Android應用程序開發是以Java語言為基礎的,所以沒有扎實的Java基礎知識,只是機械的照抄別人的代碼,是沒有任何意義的。那麼Java學到什麼程度才算是過關呢?我個人認為至少要掌握以下兩個方面的內容:
a) Java基礎語法:具體的知識點列表可以在這里下載:《Java知識點列表》V1.0。這部分內容沒有討價還價的餘地,必須爛熟於胸。至於具體的學習方法,可以看書或者是看視頻,但是關鍵是要多加練習,無論是書上的練習還是視頻裡面的練習,都需要仔仔細細的完成;
b)設計模式:由於在Android系統的框架層當中,使用了大量的設計模式,如果沒有這個方面的知識,對於Android的理解就會大打折扣。設計模式的種類非常之多,一個一個的全部掌握,是不現實的,必須首先掌握面向對象的基礎設計原則,有了這些基礎原則的支持,就可以舉一反三。這部分內容可以在《Effective Java》和《Agile.Software.Development:Principles,Patterns.and.Practices》這兩本書中找到。
2.Linux基礎知識
大家都知道,Android系統的基礎是Linux操作系統。在開發過程當中,我們也需要使用到一些Linux命令。所以說一些Linux的基礎知識是必須的(話說現在的程序員,不懂Linux都不好意思跟人家打招呼),推薦大家看看《鳥哥的私房菜》這本書,寫的相當不錯;
3.資料庫基礎知識
這個比較簡單,就是一個增刪改查的資料庫操作,可以看一下這本書:《SQL編程練習與解答》
4.網路協議
至少需要學習兩種基礎的協議,HTTP協議與Socket協議;
5.Android基礎知識
有了以上的鋪墊,再來看Android,是不是覺得輕鬆了很多呢?至於基礎知識的學習順序,最好的方法就是按照Android SDK幫助文檔當中的Dev Guide裡面的順序,我的《Android視頻教程》也基本上是按照這個順序錄制的;
6.伺服器端開發知識
由於很多Android應用程序都需要伺服器端的支持,所以掌握一些伺服器端開發知識還是非常有必要的。至於選擇哪一種伺服器端知識進行學習,就比較麻煩了,因為技術的種類實在是太多了:
a)Java EE:就是上面郵件當中所提到的SSH—Struts+Spring+Hibernate。這種技術的優點的功能完整、強大,已經使用了很多年,而且既然大家已經非常熟悉Java了,那麼學習SSH看起來也順理成章。但是使用這種技術開發伺服器端程序,非常麻煩。即使是一些簡單的功能,也可能需要大量的代碼和配置文件來實現;
b)PHP:簡單易學,開發快速。但是我們需要多學一種語言,是否得不償失,就要大家自己判斷了;
c).NET:這項技術的特點和Java EE差不多,但是要想掌握.NET,則需要掌握c#,也是個麻煩的事情;
d)ruby on rails:這是我個人最喜歡的伺服器端技術,簡潔,優雅,寥寥幾行代碼,就可以實現很復雜的功能,但是這需要Ruby語言知識作為基礎;
至於選擇哪一種技術,就看大家自己的判斷了。
夢想:要成為一個專業的Android開發者,以上的這些知識都必不可少。看起來好像很多,多的可怕。所以還是那句話--「耐心,耐心很重要」。
學習一門專業要很長時間啊,耐心很重要,很多朋友也來問我C4D,能感覺到大家都想急著學會,其實要有長時間的積累才能有長遠進步,Android開發,最近公司要做程序,也涉及到,如果UI設計師的我學會了Android,是不是可以獨立做開發了。
② 有沒有關於好的Android設計模式方面的書籍推薦主要是設計應用的、
我將按照初級,中級,高級三類來劃分推薦的書。並且按照格式——名稱,語言,內容&評論,推薦指數來寫:)。
初級:我認為初級的標準是闡述模式是什麼以及常見模式的介紹。
1.
名稱 : Head First Design Patterns
語言 : java
評論 : Jolt大獎得主,介紹了常見的十幾種模式。我認為最好的模式入門書籍,內容生動,風格活潑。如果對模式了解較少,看這本書最合適不過,即使你水平不錯,相信看了也會有收獲。
推薦 : 五星
2.
名稱 :java與模式
語言 :java
評論 : 首先介紹了SRP,LSP等基本原則,然後介紹了GOF23種模式和其他三種模式,以中國傳統名著如西遊記等舉例,寫的比較不錯。當然1000多頁的厚度讀起來也需要耐心:)。雖然有些知識稍微過時,而且跟java語言聯系太緊密,但還是本好書。
推薦 : 四星
3.
名稱 : .NET與設計模式
語言 : C#
評論 : 和上面一本書定位和風格非常相似,只不過換了語言和平台。如果你是.net的堅決擁護者,無論如何不肯看用 java語言寫的書,那麼這本書適合你,個人認為這本書寫得比C#設計模式要好。
推薦 : 四星
4.
名稱 : C#設計模式
語言 : C#
評論 : 很薄的一本書,僅僅按照GOF的風格用C#描述了GOF模式,感覺這種書意義不大。
推薦 : 兩星
5.
名稱 : 深入淺出設計模式(C#/java版)
語言 : C#/java
評論 : 和上本書風格相似,語言既有C#又有java,例子感覺是隨便從網上搜集的。
推薦 : 兩星
中級:中級的書不僅僅是介紹模式,更多的是關注模式的應用。
1.
名稱 : 設計模式解析
語言 : java(第二版)
評論 : 也是久負盛名的一本書,代碼大全的作者推薦的模式學習書籍。書中的很多思路很有啟發性,值得閱讀。只是作者狂引建築的永恆之道,讓人覺得莫名其妙。
推薦 : 四星
2.
名稱 : 重構與模式
語言 : java
評論 : 我期望很高的一本書,但看了以後發現是七分重構三分模式,對模式本身敘述不多,主要將如何重構實現模式,適合有一點基礎的朋友閱讀。
推薦 : 四星
3.
名稱 : 敏捷軟體開發 原則.模式與實踐
語言 : java,少量C++
評論 : Jolt大獎得主,非常好的一本書,首先講解了OCP,DIP等基本原則,然後通過幾個實際例子講解模式,論述的十分精彩,我認為是中級圖書中最好的一本。
推薦 : 五星
4.
名稱 : 道法自然
語言 : C++
評論 : 國人的精彩原創,相信大家早就聽說過,看過。通過FishGUI這個實際項目闡述OO和模式。只是不習慣C++的朋友讀起來可能有些障礙。
推薦 : 五星
5.
名稱 : 模式的樂趣
語言 : java
評論 : 很薄的一本小書,通俗易懂,通過三個小例子講解模式,消遣讀物:)
推薦 : 三星
6.
名稱 : 設計模式初學者指南
語言 : java
評論 : 書名嚴重誤導,絕不適合初學者看。作者通過兩個項目講解模式,寫的還是不錯的。只是作者觀點有些偏激,恐怕會引起.net程序員的反感。
推薦 : 三星
高級: 相信大家也猜的到,所有模式書籍配得上高級的也只有GOF那本了
名稱 : 設計模式 可復用面向對象軟體的基礎
語言 : C++, 少量Smalltalk
評論 : 沒什麼可說的,大家都清楚:)。除非GOF自己出第二版,否則無法超越。即使沒有能力通讀也應該買一本作為終極參考
③ Android開發的學習路線大概是怎樣的
其實網上有很多安卓學習路線圖,但是太虛了,我想說一個比較實在的學習步驟,也是我個人的學習步驟。
第一步 java基礎
因為安卓開發語言是使用java,因此必須了解,熟悉j2se。java基礎看馬士兵的視頻就行,他講的特別好,尤其是堆棧內存那一塊。然後學瘋狂java講義,不需要都學,學前十章就行,不建議初學者學java編程思想,比較難懂,不適合入門。(時間2-3個月)
第二步:書籍
入手的第一本書就是android瘋狂講義,七八百頁,其實我感覺我們不用全部都學,比如說動畫、視頻、感測器先可以不學,安卓瘋狂講義的有些設計不是很合理,把很多難的內容放到了前面,
沒有做到從易到難,我們學的過程中可以先把一章整體看一下,然後再安排學習的順序,把裡面的每一個例子都自己敲一遍。因為我上下班坐公交車時間很長因此我都是在公交車上看書,這樣一個月過去了,
瘋狂講義的主要部分學了一遍。
第三步:視頻
我看過的視頻也很多,比如說黑馬精通4.0,還有尚學堂的,還有傳智播客的,覺得最好的還是老羅的安卓開發視頻,講的很細也很全面,於是我把其它視頻都放棄了,只學老羅視頻,每天看7個,中間也有耽擱的這樣過去了一個月,所有的看了一遍,主要的,難懂的看了兩到三遍。
第四步:高仿項目
做完前兩步,自己感覺水平應該可以了,於是就想去獨立開發一個app,但是還是不知道怎麼下手,於是從網上找了幾個開源項目,開始模仿去做,有仿新浪微博,仿美團,鬧鍾,這樣過去了一個月,終於有些底氣了。
第五步:android官網
要想去安卓官網還需要翻牆,這個大家都懂,首先官網上面的api guide看一下,最後都能仿著寫一遍代碼,然後再把training上的幾個例子也仿著寫一遍。這樣學上面的例子用了一個月。
第六步 :android學習手冊
我之前一直從事java web開發,前段時間因為工作需要,轉學了安卓,在學安卓過程中,一直想找一款應用能夠展示各個章節的知識點,並且提供demo例子,就像谷歌Android API Demo一樣,google api demo例子太老了,都是外文,例子也不夠豐富,還不能看源碼,也沒有文檔。於是把自己學習安卓過程中的用到例子都整合在了一起,並把例子都寫在了android學習手冊中,希望想學安卓的java同胞們,能有一個好的例子參考,快速學習安卓,少走彎路。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,不需要積分,文檔都採用文檔結構圖顯示,可以快速定位,度娘不讓發鏈接,360手機助手中可下載。
第七步:獨立開發app
光說不幹嘴把式,光干不說傻把式。必須獨立開發一個小項目。
④ 針對Android的性能優化集中哪些方面
一、概要:
本文主要以Android的渲染機制、UI優化、多線程的處理、緩存處理、電量優化以及代碼規范等幾方面來簡述Android的性能優化
二、渲染機制的優化:
大多數用戶感知到的卡頓等性能問題的最主要根源都是因為渲染性能。
Android系統每隔16ms發出VSYNC信號,觸發對UI進行渲染, 如果每次渲染都成功,這樣就能夠達到流暢的畫面所需要的60fps,為了能夠實現60fps,這意味著程序的大多數操作都必須在16ms內完成。
*關於JobScheler的更多知識可以參考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html
七、代碼規范
1)for loop中不要聲明臨時變數,不到萬不得已不要在裡面寫try catch。
2)明白垃圾回收機制,避免頻繁GC,內存泄漏,OOM(有機會專門說)
3)合理使用數據類型,StringBuilder代替String,少用枚舉enum,少用父類聲明(List,Map)
4)如果你有頻繁的new線程,那最好通過線程池去execute它們,減少線程創建開銷。
5)你要知道單例的好處,並正確的使用它。
6)多用常量,少用顯式的"action_key",並維護一個常量類,別重復聲明這些常量。
7)如果可以,至少要弄懂設計模式中的策略模式,組合模式,裝飾模式,工廠模式,觀察者模式,這些能幫助你合理的解耦,即使需求頻繁變更,你也不用害怕牽一發而動全身。需求變更不可怕,可怕的是沒有在寫代碼之前做合理的設計。
8)View中設置緩存屬性.setDrawingCache為true.
9)cursor的使用。不過要注意管理好cursor,不要每次打開關閉cursor.因為打開關閉Cursor非常耗時。Cursor.require用於刷cursor.
10)採用SurfaceView在子線程刷新UI,避免手勢的處理和繪制在同一UI線程(普通View都這樣做)
11)採用JNI,將耗時間的處理放到c/c++層來處理
12)有些能用文件操作的,盡量採用文件操作,文件操作的速度比資料庫的操作要快10倍左右
13)懶載入和緩存機制。訪問網路的耗時操作啟動一個新線程來做,而不要再UI線程來做
14)如果方法用不到成員變數,可以把方法申明為static,性能會提高到15%到20%
15)避免使用getter/setter存取field,可以把field申明為public,直接訪問
16)私有內部類要訪問外部類的field或方法時,其成員變數不要用private,因為在編譯時會生成setter/getter,影響性能。可以把外部類的field或方法聲明為包訪問許可權
17)合理利用浮點數,浮點數比整型慢兩倍
18)針對ListView的性能優化,ListView的背景色與cacheColorHint設置相同顏色,可以提高滑動時的渲染性能。ListView中getView是性能是關鍵,這里要盡可能的優化。
getView方法中要重用view;getView方法中不能做復雜的邏輯計算,特別是資料庫操作,否則會嚴重影響滑動時的性能
19)不用new關鍵詞創建類的實例,用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable介面,我們可以調用它的clone()方法。
clone()方法不會調用任何類構造函數。在使用設計模式(Design Pattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現:
20)public static Credit getNewCredit() {
return new Credit();
}
改進後的代碼使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路對於數組處理同樣很有用。
21)乘法和除法
考慮下面的代碼:
for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
用移位操作替代乘法操作可以極大地提高性能。下面是修改後的代碼:
for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }
22)ViewPager同時緩存page數最好為最小值3,如果過多,那麼第一次顯示時,ViewPager所初始化的pager就會很多,這樣pager累積渲染耗時就會增多,看起來就卡。
23)每個pager應該只在顯示時才載入網路或資料庫(UserVisibleHint=true),最好不要預載入數據,以免造成浪費
24)提高下載速度:要控制好同時下載的最大任務數,同時給InputStream再包一層緩沖流會更快(如BufferedInputStream)
25)提供載入速度:讓服務端提供不同解析度的圖片才是最好的解決方案。還有合理使用內存緩存,使用開源的框架
引用:Android性能優化的淺談