如何深入學習安卓?

小弟現在大三在校學生,本來從事硬體開發,後來偶然接觸安卓開發之後,開始轉做軟體開發,但是由於專業並不對口,沒有相關師兄以及老師指導,完全都是自己百度,現在安卓學習有些日子,卻不知道如何深入學習下去。在此說說我已學了那些基礎,希望各位高手能夠指導如何往下走這條路。

已學內容:1,Java基礎,2,安卓UI:ListView顯示以及監聽,常用基本UI控制。3,安卓組件:窗體及其生命周期,服務及其生命周期,ContentResolve(只是拿來獲取過聯繫人以及簡訊)。4,安卓存儲:SharedPreferences、文件存儲、SQLite。

基本就是這些東西,這些東西不光看過,代碼也都敲過一遍,我知道我還有很多東西沒學,比如什麼自定義的View,非同步載入,動畫等等,我也嘗試去學這些東西,不過老是覺得好像從我現在已學知識,到那些高級的東西中間缺了一塊內容,希望各位前輩指點我接下來應該學些什麼。


你現在這個水平剛剛是那種可以開始做應用的程度。做個應用,就能把很大一部分東西掌握了。就拿我寫Twidere舉例子。(從2012年開始,之前已經知道更基礎的)

最初步:Fragment、Loader、Service、ContentProvider、ContentResolver、AdapterView

進一步:Library project、Parcel、HTTP Clients

幾個版本後:Android Design、SSL協議、Custom View

一年後:進一步的Android Design、Notifications、SQLite的各種用法

兩年後:Android Studio、Gradle、RecyclerView

這中間學了一大堆東西,還有其他語言也會接觸到。


不請自來,趁著repo sync的間隙,說點自己的體會.我覺得至少可以分為以下幾個階段:

第一個階段,熟悉常用組件,能夠完成基礎工作.四大組件自不必說,還有其他一些諸如Fragment,PopupWindow,Animation等也是經常需要用到的,這個就是一個熟練的過程,不多說;

第二個階段,會使用並改造甚至創造輪子.如果你自己完整地做一個App的話,你就會發現雖然github上已經有很多很好的開源項目(比如ImageLoader),Google也提供了一些不錯的支持庫,比如Volley,但是不一定能很好地完成你需要的功能,比如你做一個可能被頻繁打開的圖片列表,ImageLoader就未必能滿足你的要求,這時你就需要自己寫緩存框架,那就需要自己去實現三級緩存;又比如Volley很好用,但是如果你跟伺服器交互的數據較大,就不能再使用volley了.還有在你自己造輪子的過程中,可能會碰到像ListView圖片顯示錯位之類的問題,都不是第3方庫能幫你解決的(當然,可以學習他們的實現).退一步說,就算都能比較好地實現你的需求,但是你多用幾個第3方庫試試,估計功能還沒做完,安裝包就已經超過20M了,要知道,微信那麼多功能也才20多M. BTW,我自己在做現在這個項目的過程中造了幾個輪子,先佔個坑,後面會補上github的repo地址;

第三個階段,研究Android source code. 我自己也剛剛開始,目前正在看ActivityManagerService.雖然Android源代碼號稱有50多萬行,但是我覺得也沒有必要全看(實際上也沒那麼多時間),把核心的實現看完就不錯了,剛開始的話建議可以先看Android源碼的3大核心:ActivityManagerService, WindowManagerService, View. 當然,在這個過程中肯定要順帶著把Binder,Context等吃透.看源碼未盡必有立竿見影的效果,但是確實對於理解Android的工作機制,以及很多優秀的架構及實現有很大的好處.

送個傳送門:大牛們是怎麼閱讀 Android 系統源碼的? - Android 開發

最後,請一定不要在Win下做Android開發,使用Linux或者OSX可以憑藉個人喜好去選擇.


1.做出一個完整的可以用的app

2.重構上個版本app的代碼,盡量採用Google最佳實踐

3.改善app UI,看看能否設計的更符合MaterialDesign

4.從運行效率,內存佔用上優化app,儘可能的減少內存泄露,提高相應速度

5.分享你的app,GitHub放出來,讓大家一起參與進來,看別人能給你哪些改善和反饋

6.從2開始再來一遍看看


樓上很多的建議很中肯,不過還是模糊了一點。等餐時間,占樓層來歸納一下。

1.定位。樓主現在屬於剛入門水平,跟著公司做項目的話,略有java基礎的同學一兩個月大概就可以到達這樣的程度。

2.看了樓主的描述,應該沒有完整開發過一款app.一般一個簡單的android app包括界面,http api交互,圖片展示,數據緩存(SQLite, file),業務邏輯處理。

樓主可以先從零開始完整的做一個app,這樣就能知道自己大概缺乏哪些知識。

3.app做完後,也積累了一些開發經驗。這時候你可以反編譯一些知名app,看看相同的功能人家是怎麼做的。沒必要完全看懂,只需要知道人家實現這些功能大概用了那些技術。這個時候,你估計會涉及到一大堆開源庫。

4.歡迎來到新世界-開源的世界。這時候,就會感覺自己有多麼渺小,世界有多大!

擦,肉串都涼了,我趕緊吃了!


看樓主學完se就去學安卓了,過來人給樓樓主點建議,還是先把javaweb中的東西學一點再去安卓比較好,servlet 要學,還有就是後端的框架struts2 hibernate spring 學servlet是因為安卓端與伺服器選要交互,不能只停留在單機上。學框架可能讓你把代碼寫的規範,對面向介面編程啊,開發模式都會有一定了解。


加油,我和你差不多,可能比你差點,我在網上找項目實戰的視屏看!



推薦閱讀:

國內有什麼類似App Annie的網站,可以監控國內安卓渠道的排名情況?
Linux下交叉編譯出的so庫依賴libstdc++.so.6的問題?
如何評價Zealer安卓版客戶端?
Github 上有哪些值得學習的 gradle 開源插件?
Android「應用已停止運行」是什麼原理?

TAG:Android開發 | Android |