Android初學路上會遇到的瓶頸【安卓巴士博文大賽】
對於大多數大三學生來說,這個暑假是人生最後一個暑假。對於IT專業的學生來說,開學後就要面對各大IT企業的秋招,很多人會成為從0開始的Android實習生。在Android初學之路上,每個Android實習生都會遇到各式各樣的瓶頸。
克服瓶頸要從克服自己對一切瓶頸的偏見做起,把逃避瓶頸的行為變成享受瓶頸帶來的樂趣的過程。要知道喜力比國產啤酒貴好多的一條重要原因就在於喜力的瓶頸:你現在去買一瓶玻璃瓶裝喜力,用手握住瓶頸,大拇指按住那顆星,然後用你最熟悉的動作擼瓶頸,你會喜歡這種手感的。
Android佈局和螢幕適配
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解析
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自帶的控制元件不能滿足太複雜的介面控制元件需求,因此繪製自定義控制元件也是的必備技能。繪製自定義控制元件需要掌握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程式設計師的技術水平都可以達到獨當一面的程度,甩掉了初學者帽子的程式設計師會發現頭頂不再是瓶頸,而是從技術到管理的天花板。
本次比賽的主題帖連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2814177/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android富文字Html原始碼解析【安卓巴士博文大賽】AndroidHTML原始碼安卓
- 學習前端遇到瓶頸了?這些‘好’習慣都會毀掉你前端
- banq老師,學習java遇到瓶頸了,該怎麼辦?Java
- Android高階開發突破瓶頸Android
- 前端瓶頸如何打破???前端
- 如何突破前端瓶頸???前端
- 打破Kafka帶來的瓶頸?Kafka
- 搜狐基金使用 MySQL 遇到瓶頸?來看 TDengine 如何解決難題MySql
- [轉]檢測SQLSERVER資料庫CPU瓶頸及記憶體瓶頸SQLServer資料庫記憶體
- HTTP請求的TCP瓶頸分析HTTPTCP
- 做Java開發,遇到瓶頸是保持現狀還是尋求突破?Java
- 自媒體團隊會面臨哪些瓶頸和困境
- 軟體測試學習資源—瓶頸分析方法
- 初學javaweb遇到的問題JavaWeb
- 利用PerfDog分析遊戲效能瓶頸遊戲
- 化解應用系統瓶頸
- 磁碟IO、MEM瓶頸優化優化
- web併發,誰是瓶頸?Web
- 如何監控 Log4j2 非同步日誌遇到寫入瓶頸非同步
- 顯示卡瓶頸是什麼,如何識別顯示卡GPU瓶頸並解決以提升PC效能GPU
- Android高階工程師普遍進階難題:遇到瓶頸我們該如何去提升自己?哪個方向?Android工程師
- 實用技巧:快速定位Zuul的效能瓶頸Zuul
- 如何識別SQL Server中的IO瓶頸SQLServer
- 如何識別SQL Server中的CPU瓶頸SQLServer
- 用 pprof 找出程式碼效能瓶頸
- Chrome執行時效能瓶頸分析Chrome
- 軟體測試:瓶頸分析方法
- 如何使用 Wireshark 分析 TCP 吞吐瓶頸TCP
- 智慧城市資金瓶頸亟待突破
- oracle快速定位資料庫瓶頸Oracle資料庫
- linux I/O 瓶頸監控Linux
- wait event監測效能瓶頸AI
- 如何正確定義效能瓶頸
- 工作一到五年的Java程式設計師遇到瓶頸應該如何提升自己突破Java程式設計師
- Java初學者最佳的學習方法以及會遇到的坑(內含學習資料)!Java
- 孩子練琴遇到了瓶頸期,幸好遇見了VIP陪練小提琴張老師
- Linux命令----分析系統I/O的瓶頸Linux
- 影響你網站效能的 5 個瓶頸網站