一個 Android 技術專家,至少有 2~3 個專業領域。
寫在前面
如果你只是一個想成爲 Android 開發者的人,並且還沒有寫過任何應用,那麽這篇文章對你來說,還有點太早。本文主要是爲了幫助開發者成爲一個更專業的人。
本文,我會給你很多建議,不會讓你空手而歸。文章中列出了如何在短時間成爲一個專業的開發者。讀完文章,需要你自己去練習,並時常回來看看這些技能。
在本文開始之前,我就當你已經在 Google Play 發布過 Android 應用並且使用 GitHub 來進行源碼管理。
2-4 年開發經驗
當你在你的職業生涯中工作幾年,你變成經驗豐富的 Android 開發者,通過研究和學習,你可以很輕松的實現一些非專業化的功能。那下一步,你該做什麽?
我認爲,在這個時候,你已經很熟悉 Android 框架的基礎知識了,可以嘗試去學習更高層次的技能。這些技能不局限于 Android,它們是一些通用的軟件開發的技能。具體來說,你可以研究以下主題:
-
依賴注入
依賴注入是一個關注結構分離的設計模式。它主要是用來進行分離應用程序的兩個功能:應用程序和核心功能、核心功能組件實現之間的鏈接。
從某些方面來說,實現了依賴注入的代碼庫就好你一個計算機:依賴注入的基礎庫就像是主板一樣,而其他的功能組件就好像是 CPU、內存、外設等。只要你的代碼中實現了依賴注入,你就可以很方便的插入新功能,並且可以很容易的重用其它組件的功能,也可以很方便的使用新組件的功能。雖然這個比喻有點誇張,但是在我看來,它也確實很好的反映了依賴注入背後的思想。
不幸的是,現在關于依賴注入的文章,很多都存在誤解,這給初學者帶來很多幹擾。因此,如果你想學習依賴注入,我建議你讀一下這篇文章,本文中,我分析了衆多依賴注入的“神話“。
-
UI 分離
由于 Android 框架本身的架構,造成了我們在開發的過程中,使用戶頁面與應用程序中的其它邏輯耦合在一起。幾乎所有的 Android 初學者都會這樣。這種耦合會導致我們寫一個很大的類,這個類裏面有應用程序的 UI 繪制、網絡處理、多線程處理、應用業務邏輯等。
根據我的經驗,UI 邏輯與其它邏輯耦合在一起,會導致代碼的可維護性越來越差,遲早會使用代碼變得難以理解,無法閱讀。到最後,可能會因爲功能上的一點小變化,引起很大的副作用。
要將 UI 邏輯與其它邏輯進行分離,可以用使用 Model- View – X 的架構模式。例如: Model-View-Contoller(MVC)、Model-View-Presenter(MVP)、Model-View=ViewModel(MVVM)。這些架構模式都屬于同一類架構,當然,這一類架構不僅僅包含列舉的這幾個,還有其它的架構模式。在這裏,爲了更方便的描述這一類架構模式,我把他們統稱爲 MVx 模式。
當你在學習 MVx 模式的時候,請記住,這些都不是架構,而是一種架構模式。這些架構模式僅用于 UI 展示邏輯。因此僅僅使用 MVx 並不能給你一個好的架構,要有一個好的架構,你還需要在其它方面做出更多的努力才能實現。
-
多線程
有經驗的 Android 開發者都會了解多線程,並且了解他們對應用程序的影響。你也許會說,我精通 AsyncTask、RxJava、協程等。我想表達的多線程不是你理解的這個。會使用多線程框架並不等同于理解多線程。
舉個例子,衆多 Android 開發者都認爲,使用 AsyncTask 會導致內存泄漏。這個觀點來自 Android Studio 默認的多線程 lint 規則中。既然如此,那這個觀點就是對的了嗎?很不幸,這個觀點是錯誤的。在這裏,我不講解它們的細節,你可以讀一下這篇文章,裏面有很多關于 AsyncTask 的內容。
我認爲要理解多線程程,就必須可以使用任何多線程框架,甚至是基于基礎的 Thread ,都可以寫出正確的並發代碼。要實現這個目標,你不僅僅需要知道你喜歡的多線程庫的 API,你還需要理解多線程的細節。這些多線程庫雖然好用,但如果你不理解多線程的基礎細節,那麽你的應用程序出現多線程的問題只是時間問題。
如果你想學習多線程,從這個視頻 開始,視頻中講解了所有 Android 開發人員都需要知道的基本概念與原理。
-
自動化測試
據我所知,很多 Android 項目,都沒有使用任何的自動化測試。在使用自動化測試的項目中,大多數也是 QA 人員使用 Appium 之類的工具來完成的。這是整個 Android 行業的現狀,非常可悲。之所以沒有自動化測試,這個問題可以追溯到 Android 起源,Google 也在很長一段時間裏,沒有關注過第三方應用的自動化測試。
現如今,有單元測試和 UI 自動化測試經驗的開發者需求量很大。即使你到一家沒有使用過任何自動化測試的公司去面試,如果你說你會自動化測試,就會給你的面試加分。反之,如果你去的是一個廣泛使用自動化測試的公司,你沒有自動化測試的技能,這會給你面試減分,處于劣勢。
因此,我建議每一個 Android 開發者都去學習一下自動化測試的相關知識。就個人而言,我更喜歡單元測試。而一些開發者喜歡 UI 自動化測試。所以,可以選擇一個你更感興趣的技術,嘗試一下。
總結
以上,這是我建議你,作爲一個專業的 Android 開發者應該具備的技能。
你可能已經發現,我的文章標題是 《Android Developer Skills for 2020(2020 年,Android 開發者需要的技能)》,但是這篇文章中沒有什麽內容是特定于 2020 年的。我可以在一兩年前寫這篇文章,因爲本文內容適合所有時間,基礎和重要的概念不會經常改變。
現在,如果你對 Android 生態系統的最新發展感到好奇,你可以閱讀我的另一篇文章 ,我總結了 2019 年底 Android 發展的狀況。最後,我再重複一次,如果你想成爲一個優秀的 Android 開發人員,請集中精力,對基礎和重要的事情做深度研究。
一如既往,感謝你的閱讀。你可以在下面留言評論和提問。
英文:Android Developer Skills for 2020
鏈接:https://www.techyourchance.com/android-developer-skills/
作者:Vasiliy Zukanov,獨立 Android 開發及軟件顧問
譯者:羅昭成,Android 開發者