【玖哥亂彈】Android初學路上會遇到的瓶頸

對於大多數大三學生來講,這個暑假是人生最後一個暑假。對於IT專業的學生來講,開學後就要面對各大IT企業的秋招,不少人會成爲從0開始的Android實習生。在Android初學之路上,每一個Android實習生都會遇到各式各樣的瓶頸。程序員

 

克服瓶頸要從克服本身對一切瓶頸的偏見作起,把逃避瓶頸的行爲變成享受瓶頸帶來的樂趣的過程。要知道喜力比國產啤酒貴好多的一條重要緣由就在於喜力的瓶頸:你如今去買一瓶玻璃瓶裝喜力,用手握住瓶頸,大拇指按住那顆星,而後用你最熟悉的動做擼瓶頸,你會喜歡這種手感的。json

 

Android佈局和屏幕適配api

 

Android初學者遇到的第一個瓶頸就是Android 佈局的編寫。首先Android的layout是用XML寫的,而大多數大學生在大學階段學習網頁製做,都是用HTML繪製基本控件,而後用CSS進行頁面美化;而Android卻用XML繪製界面,style也是用XML寫。學習XML最重要的熟能生巧,多練習練習就順手了,另外XML和HTML有不少類似的地方,好比padding與margin的區別都是同樣的。緩存

 

此外Android系統碎片化嚴重,不一樣型號的手機有着不一樣的屏幕尺寸和不一樣的分辨率。爲了解決這個問題,咱們能夠把背景貼圖作成.9png格式,而且用內容和padding撐起控件。若是須要適配的機型實在太極端,咱們能夠百分比佈局解決這個問題——PercentRelativeLayout和PercentFrameLayout等。性能優化

 

不一樣組件的生命週期網絡

 

Android初學者遇到的第二個瓶頸就是生命週期,Android的生命週期主要有Activity生命週期、Fragment生命週期、Service生命週期三種。學很差Activity的生命週期,你作很差界面跳轉的特效,也作很差系統Activity(相機等)的回調;學很差Fragment的生命週期,你寫不出惰性加載;學很差Service的生命週期,你連後臺運行都作不到。學習生命週期,要記住「文無圖時少直觀,圖無文時難入微」,用圖表輔助記憶。框架

 

網絡請求和json解析ide

 

Android是移動互聯網的重要組成部分,網絡請求和Json解析是Android學習中的重要環節,不少初學者會在此處遭遇瓶頸。佈局

 

爲了突破這個瓶頸,初學者應該先選擇合適的框架以儘快解決實習工做中的問題。經常使用的網絡請求框架有Volley和OKHttp等;常見的json解析框架有Gson和Jackson等,若是你的求職目標是阿里巴巴集團,學習一下FastJson是能夠助你一臂之力的;此外還有把網絡請求和json解析整合到一塊兒的Retrofit。性能

 

實習生初入企業,要記住用工做時間解決工做中的問題,知識的探索和能力的提高要利用本身的業餘時間。下班後要學習以上框架的源碼和實現原理,好比Android的網絡請求必須在子線程中進行,不然會形成NetworkOnMainThreadException;如今的網絡請求都是基於HttpURLConnection的,任何大談HttpClient的資料都是過期的;還要弄清楚Handler的原理、ThreadPool的原理、AsyncTask的原理等;json解析方面的知識還有JSONObject和JSONArray的區別、Java的泛型機制、Java的反射機制等等。

 

圖片加載和內存優化

 

Android機的價位通常比iPhone低得多,因此Android系統比iOS系統更容易遇到內存溢出問題(OutOfMemoryError,簡稱:OOM),這也是初學者常見的學習瓶頸之一。OOM最多發於圖片,其次佈局中嵌入的地圖、視頻等吃內存大戶也是OOM的罪魁禍首之一。

 

解決加載圖片的OOM應該先選擇Picasso、Glide、Fresco等框架以儘快解決工做中的問題,而後利用我的時間學習Android緩存機制——LruCache和DiskLruCache;地圖、視頻的OOM應該在界面被回收時清除控件、中止服務;其餘的OOM應該用弱引用和軟引用解決。

 

RecyclerView

 

Android最經常使用也是最複雜的控件是RecyclerView(2014及之前的資料是ListView),由於滑動衝突、列表中數據修改等問題都會在RecyclerView中體現。爲了克服這些瓶頸,必需要搞清楚RecyclerView.Adapter(也包括之前的BaseAdapter)的工做原理,ViewHolder的工做原理,以及ViewGroup的事件分發機制等內容,這些內容不下大力氣學習是不能徹底掌握的。

 

克服了以上瓶頸後,估計實習生也該到了畢業轉正的時間了,進階路上還有新的瓶頸。新瓶頸有新的玩法:這種玩法須要雙手操做,若是用另外一隻手按住打開着的瓶口擼瓶頸,你能夠一邊擼一邊使勁搖,玩HIGH的時候忽然鬆開按住瓶口的手。

 

自定義控件

 

Android自帶的控件不能知足太複雜的界面控件需求,所以繪製自定義控件也是Android工程師的必備技能。繪製自定義控件須要掌握View的幾個常見方法的重寫,如onDraw()、onMeasure()、onLayout()等;對事件分發機制的瞭解也應該比RecyclerView更精熟;此外還須要掌握Canvas和Animator的相關知識,Android的Canvas和HTML5的Canvas有不少類似性,能夠以此突破Canvas的學習瓶頸。

 

進程間通訊

 

不一樣App之間以及同一個App的不一樣進程之間須要多進程通訊,多進程通訊在視頻播放等佔用大量資源的場合是頗有必要的。進程間通訊的初學者百度「多進程」會被AIDL繞得雲裏霧裏,其實你只要試試Messenger框架,一切進程間通訊的難題都會迎刃而解。

 

Android性能全面優化和crash分析

 

Android初學者會遇到的最後一個瓶頸是Android性能全面優化。前面提到的Android內存優化是Android性能優化中最重要的部分,但也只是一小部分,Android性能優化還包括安裝包體量優化、GUI繪製優化、電量和流量優化等。

 

GUI方面能夠利用ViewStub和去掉其餘沒必要要的背景來避免OverDraw;安裝包體積能夠用壓縮圖片、去除重複且無用的依賴等方式進行優化;電量和流量能夠經過用推送代替輪詢、用GZIP文件格式下載過長的數據流等方式進行優化。

 

在移動應用性能方面,崩潰(Crash)帶來的影響是最爲嚴重的,Crash指App在運行過程當中出現大段用戶正在進行的操做的強制關閉現象。Crash會形成關鍵業務中斷、產品口碑變差、用戶流失等問題。Crash能夠用UncaughtExceptionHandler捕捉,也能夠利用UMeng和Bugly等服務分析,請注意:若是打算跳槽到阿里,就用UMeng,想要跳槽到騰訊,就用Bugly。

 

突破了上述全部瓶頸之後,Android程序員的技術水平均可以達到獨當一面的程度,甩掉了初學者帽子的程序員會發現頭頂再也不是瓶頸,而是從技術到管理的天花板。

相關文章
相關標籤/搜索