專訪何紅輝:談談Android源碼中的設計模式

jopen 9年前發布 | 42K 次閱讀 Android
 

最近Android 6.0版本的源代碼開放下載,剛好分析Android源碼的技術書籍《Android源碼設計模式解析與實戰》上市,我們邀請到它的作者何紅輝,來談談Android源碼中的設計模式,以及近期Android開發中的一些熱點話題。

受訪嘉賓介紹:

何紅輝(@MrSimp1e),前友盟Android工程師,活躍于國內各大技術社區,熱愛開源,熱愛技術,熱愛分享。Android開源庫 AndroidEventBusColorful 作者, 開發技術前線 站長,《Android源碼設計模式解析與實戰》作者。

專訪何紅輝:談談Android源碼中的設計模式

InfoQ:祝賀您的新書出版,我看到Github上有一個和書名相同的項目,這本書的內容生產模式是什么樣的?

何紅輝:其實寫這本書我很早就有規劃了,這個想法誕生于我還未參加工作之前,因為國內確實沒有這方面的著作。只是當時能力不足、資歷尚淺,因此也就把這個想法埋在心中了。

2014年4月份我開始在博客發表《Android源碼分析之設計模式》系列文章,慢慢將本書的雛形建立起來。2014年底開始活躍于開源社區,到2015年2月份突然想到可以在Github上創建這樣一個 項目 ,通過開源的形式讓更多的人參與進來,分享自己對模式的見解,或者說讓大家把軟件設計重視起來。

為了降低我個人在項目中的文章數量,我將分析的素材推薦給其他參與進來的同學,讓他們來執筆,這樣能夠提升大家的積極性。同時,我作為整個系列 文章的審稿人員把握文章質量。經過大家一個月的努力,Android源碼設計模式分析的Github項目正式對外發布,一經發布得到了業界的廣泛好評。這 讓我很受鼓舞,因此出版的想法又再次浮現出來。

由于第一次寫書出版,資歷尚淺,特意邀請了關愛民老師與我一起撰寫本書。在書中我們重寫了所有章節,在深度、難度上都比Github上的開源文章有了大幅度的提升。因此,Github上的文章與書中的內容是有很大差距的。

InfoQ:關于Java設計模式已經有很多經典的書籍,為什么還會想要寫Android源碼的設計模式?

何紅輝:Java設計模式方面的書籍通常只是通過Java語言來講解設計模式,并非深入到一個系統中剖析設 計模式的運用。這類書籍是教讀者什么是設計模式,而我們的書籍除了教讀者什么是設計模式之外,更是深入剖析Android源碼中設計模式的應用,讓讀者從 具體的代碼中體會設計模式的使用場景、作用,真正領悟到軟件設計之美。

InfoQ:您是怎么閱讀和分析Android源碼的,有哪些好用的工具?

何紅輝:由于我分析源碼只是分析特定的部分,因此對于工具并沒有什么太高的要求,方便搜索與跳轉即可。因此只是通過Sublime Text 2,安裝上插件即可方便的閱讀代碼,Atom也是一個很好的選擇。

InfoQ:最近Android 6.0源碼對外開放,對這次更新您有哪些感興趣的內容?

何紅輝:對于6.0我并沒有重點去關注,畢竟對于Android應用開發來說,用戶設備的系統更新不像 iOS那么及時。但是6.0中的App Permissions、Android Pay、App Links這幾項新特性倒是值得關注,這些新特性對于應用開發來說相關性相對高一些。而我真正關注的是Android的整個生態在不斷的擴大,在智能車、 智能手表以及物聯網平臺都有了比較大的進展,這對于從事Android人員的人來說才是最好的消息。

InfoQ:在Android開發中,哪些設計模式最常見?哪些設計模式受到誤解最多?

何紅輝:GOF的《設計模式:可復用面向對象軟件的基礎》一書中總結了23種設計模式,但在開發中比較常用 的也就是單例、Builder、適配器、觀察者、抽象工廠、外觀、模板方法、策略這幾個設計模式。學習任何東西都不能生搬硬套,設計模式更是如此。在合適 的場景中運用前人總結的設計模式解決自己的問題,這才是提出設計模式的初衷。

說到受到誤解最多的設計模式可能要數工廠方法和抽象工廠兩個模式了,這兩個也是常用的設計模式,而且比較簡單。受誤解的原因是這兩個模式容易讓大家混淆,比如這里有兩個問題:它們的作用是什么,它們的區別是什么?如果你沒有一個確切的答案,那么應該回去翻翻書了。

InfoQ:最近Android開發里對RxJava研究比較多,您對響應式編程模式怎么看?

何紅輝:響應式編程能夠非常好的簡化代碼,讓代碼的可讀性、穩定性都得到很大程度的提高。開發技術前線也翻 譯了多篇高質量的關于RxJava的文章。但是RxJava的問題是在于它的庫過大,超過700KB的大小讓我有點不能接受。因此,如果你想使用響應式編 程來簡化一些代碼,那么可以參考 《 NotRxJava懶人專用指南 》這篇文章來創建一個簡單的Rx庫。這樣既能對響應式編程有更深入的了解,也能了解實現響應式編程的實現原理,更能夠提升自己的技術能力。

InfoQ:Android源碼中有哪些經典的架構,它們的好處是什么?

何紅輝:Android中最直觀的分層架構和微服務架構。我們最常看到的Android體系架構就是一個典 型的分層架構,分為應用層、Framework層、Native層、內核層。上層是下層的調用端,下層則為上層提供服務,每一層都代表了應用的一個功能, 每一層的職責也相對較單一,這樣使得系統的模塊化程度、可測試性更高。

另一個明顯的架構模式就是微服務架構。微服務架構的體現是System Service與Framework層的設計上。Android系統在啟動時會啟動ActivityManagerService、 PackageManagerService、WindowManagerService等系統服務,用戶在執行操作時,會通過Framework層向對 應的Service發出請求,具體的Service接到指令之后做出反應。這樣一來,Framework與這些System Service就構成了一個微服務架構,它們通過Binder進行通信,既解除了耦合,又提升了靈活性、可擴展性。

像Android這類大型應用中自然還有很多經典架構模式的運用,大家可以根據Android系統的源碼中的線索來查找這些優秀運用示例。

InfoQ:能否談下Android開發中MVP/MVVM架構的優點和缺點?它的使用場景是什么?

何紅輝:MVP與MVVM都是Android中比較好的應用架構模式,它們的優點都是能夠降低耦合,提升應 用模塊的可測試性,并且能夠在一定程度上避免過于復雜的Fragment、Activity類型,使得整個軟件架構變得更為簡單、清晰。它們缺點主要是職 責分得比較細,這樣必然會產生很多類型。例如一個Activity,需要有Model、View、Presenter三個元素,這三個元素又要分接口、實 現類,頁面一多各種Model、View、Presenter類型就繁雜起來。當然,通過合理的分包也能夠在一定程度上緩解這個問題帶來的負面影響。因 此,只要你想讓你的應用架構更靈活、可擴展、易測試,MVP、MVVM都是很好的選擇。

InfoQ:接下來您有何學習或寫作計劃?

何紅輝:在完成《Android源碼設計模式解析與實戰》之后我就馬上開始著手寫另一本書, 《Android開發進階-從小工到專家》。這本書的定位是學習Android開發的第二本書,本書首先對Android開發的核心知識點進行深入講解, 包括View與動畫、網絡、多線程、數據庫,然后介紹單元測試、代碼規范、版本控制、重構、架構等重要知識點,使得讀者在深入技術的同時開闊眼界,能夠以 更專業的方式設計應用軟件,完成從只會實現功能的“碼農”到軟件工程師、設計師的過渡。《Android開發進階-從小工到專家》預計將于2015年12 月31日之前上市,到時候還希望大家多多支持。

這兩本書就是目前我這兩年想寫的全部內容了,完成這兩本書之后自己也可以靜下心來進行進一步的學習。不斷的補充知識、更新知識,才能與這個行業保持同步,內心也能夠得到滿足。最后,希望大家多多向我 反饋建議 ,多多交流,共同進步。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!