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

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

受訪嘉賓介紹:git

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

專訪何紅輝:談談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日以前上市,到時候還但願你們多多支持。

這兩本書就是目前我這兩年想寫的所有內容了,完成這兩本書以後本身也能夠靜下心來進行進一步的學習。不斷的補充知識、更新知識,才能與這個行業保持同步,心裏也可以獲得知足。最後,但願你們多多向我 反饋建議 ,多多交流,共同進步。

相關文章
相關標籤/搜索