心得分享:關于對Android的理解,知識點梳理

前言

寫這篇文章是為了和大家描述下我對Android的理解,同時會講述下我后面的技術(shù)規(guī)劃,希望能夠?qū)Υ蠹矣悬c參考價值。大家都想學好Android,那么怎么才能學好呢?這個真不好說,但是我可以和大家交流下我自己的心得,當然僅限應用層開發(fā),因為我本身是側(cè)重應用層開發(fā)的。

知識的分類

Android中有很多知識點,雖然說大部分知識點都不難,但是量很多,這就會給人一種很瑣碎的感覺。在這種情況下就要對知識進行分類,我對Android知識的分類為:

1. 基本知識點

比如四大組件如何使用、如何創(chuàng)建Service、如何進行布局等。這類知識是需要熟練掌握的。

2. 稍微深入的知識點

比如AIDL、Binder、多進程、View的繪制流程、事件分發(fā)、消息隊列等。這類知識對于高級開發(fā)者來說也是必須掌握的。

3. 基本知識點的細節(jié)

比如Activity的啟動模式和標記位、Service同時處于start和bind狀態(tài)時的停止問題、AsyncTask的同步異步問題以及使用時的限制等,這種問題還有很多。這類知識點,大家在開發(fā)過程中可以并不會去注意,這會導致一個問題,那就是開發(fā)應用沒問題,但是在面試時面試官只要稍微問下細節(jié)或者特殊情況,就hold不住了。

4. 系統(tǒng)核心機制

比如主線程的消息循環(huán)、主線程如何和AMS如何跨進程交互、SystemServer進程中的各種Service的工作方式。這類知識對于高級開發(fā)者也是建議掌握的,因為它們可以讓開發(fā)者理解Android的運行體系。

5. 瑣碎的知識點

此類知識點我把它們定義為一些重要但是沒有什么技術(shù)難度的問題,比如如何打開一個網(wǎng)頁、如何打電話、如何發(fā)短信、如何定位、多點觸控等,這類問題往往不好記憶,但是需要的時候去查一下就能立馬搞定。

[td]

類別描述

開發(fā)者所需級別

基本知識點熟練掌握

初中級

深入知識點熟練掌握

中高級

基本知識點的細節(jié)掌握

高級

系統(tǒng)核心機制熟悉、掌握

高級、資深

瑣碎的知識點了解

所有級別

如何學習

關于Android知識點的學習,無非就是看書、看官方文檔,寫代碼等,這個是需要投入時間的。大家比較容易困惑的就是看Android源碼,覺得“看不懂”,這是可以理解的??丛创a的時候我們要側(cè)重對流程的把握,剛開始時不要糾結(jié)太多的代碼細節(jié)。

有時候一遍看不懂的話就多看幾遍,這樣慢慢的就有眼熟了,眼熟后就能看懂了。另外看源碼要講究切入點,源碼那么多從哪里開始下手呢?其實我建議先找一些自己感興趣的切入點,比如大家有沒有想過“Activity啟動時,Activity的對象時在什么時候創(chuàng)建的?”這個問題,因為Java時面向?qū)ο蟮恼Z言,所以Activity必須要創(chuàng)建一個對象,帶著這個疑問去分析,一步步揭開謎團也是很有意思的事情。針對上面這個問題如何去分析Activity的對象到底是何時創(chuàng)建的呢,其實很簡單,沿著Context的startActivity方法跟下去就好。

采用這種方式去看源碼,當看了一些主題后就會有一種貫穿的感覺,而這種感覺其實就是知識體系,這個知識體系是建立在Android的整體之上的。但是,不建議大家上去就看C層的源碼,可等對源碼有一定理解后再去看。關于瑣碎的知識點,建議大家不好花費太多時間在上面,沒有太大意義。

要知其所以然

在學習過程中,我們還要有質(zhì)疑的精神。很多知識點我們掌握了,但是為什么是這樣的,這個問題可能很多人并沒有去想過。比如RemoteViews只支持有限的系統(tǒng)View,但是為什么呢?有沒有想過?如果大家去想這個問題,那么就可以更好地理解RemoteViews的本質(zhì)。

再比如AsyncTask要求第一次訪問這個類必須在UI線程,這一點我想大家都知道,但是為什么必須這樣的?如果第一次訪問AsyncTask在子線程會怎么樣呢?帶著這些疑問去思考去探索,那么你的技術(shù)檔次就會更上一層樓。

我的技術(shù)規(guī)劃

就我目前來說,我還有很多東西不太會,不管是Android還是其他技術(shù)。對于Android來說,源碼我還需要更深入地看下去,同時我還需要去進一步學習Linux shell腳本以及Linux的內(nèi)部實現(xiàn),這樣可以進一步地理解Android的實現(xiàn),IOS我也需要稍微了解下,這樣能夠擴寬我的知識面,畢竟IOS也屬于移動開發(fā),但是我不會發(fā)很多精力去研究IOS,事實證明,“什么都擅長就等于什么都不擅長”,一個人要成為全棧工程師真的非常非常難,而且國內(nèi)的招聘很多不需要全棧工程師,而且所謂的全棧工程師很可能在面試中就被淘汰(由于深度不夠的原因)。

我還會學習一些編譯環(huán)境的搭建,比如Gradle、Gerrit等。

按照這種規(guī)劃去學習,我在Android就會達到一定深度并且有了Linux內(nèi)核知識的支撐,然后了解IOS開發(fā),同時還能搭建環(huán)境啥的,至于C、C++、Web開發(fā)之類的知識點,我在學校時就有初步的了解,這樣一來,知識的廣度和深度我都有,我認為應該是不錯的規(guī)劃。

當然,有些安卓代碼為了避免被他人反編譯,所以進行了代碼混淆。因為很多不法分子盜版一款安卓應用就是從反編譯開始。所以從移動應用安全角度講,為了避免他人了解自己的安卓應用的布局和邏輯,的確應該做一些反編譯的保護措施,尤其是避免被競爭對手看到。如果開發(fā)者不想被他人反編譯,提高APK的安全性,可以使用愛加密(http://www.ijiami.cn)進行加密保護。我也做過測試,使用愛加密后,原有的代碼程序都被隱藏了,沒法再看到源代碼。

參考文章:http://blog.csdn.net/singwhatiwanna/article/details/46810527

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容