
App整體架構(gòu)起源
對程序進行架構(gòu)設(shè)計的原因,歸根到底是為了提高生產(chǎn)力。
通過設(shè)計使程序模塊化,做到模塊內(nèi)部的高聚合和模塊之間的低耦合。這
樣做的好處是使得程序在開發(fā)的過程中,開發(fā)人員只需要專注于一點,提高程序開發(fā)的效率,并且更容易進行后續(xù)的測試以及定位問題。
基于MVP的架構(gòu)設(shè)計思路
mvp的全稱為Model-View-Presenter,Model提供數(shù)據(jù),View負責顯示,Controller/Presenter負責邏輯的處理。
在App開發(fā)過程中,經(jīng)常出現(xiàn)的問題就是某一部分的代碼量過大,雖然做了模塊劃分和接口隔離,但也很難完全避免。
從實踐中看到,這更多的出現(xiàn)在UI部分,也就是Activity里。

MVP是一種使用廣泛的基礎(chǔ)架構(gòu)模式,使用基于事件驅(qū)動的應用框架。
MVP從更早的MVC框架演變過來的一種框架,與MVC有一定的相似性。
MVP框架由3部分組成:View負責顯示,Presenter負責邏輯處理,Model提供數(shù)據(jù)。
MVP與MVC之間最主要的區(qū)別在控制層上,在MVP框架中,View與Model并不直接交互,所有的交互放在Presenter中;而在MVC里,View與Model會直接產(chǎn)生一定的交互。
MVP的Presenter是框架的控制者,承擔了大量的邏輯操作,而MVC的Controller更多時候承擔一種轉(zhuǎn)發(fā)的作用。因此在App中引入MVP的原因,是為了將此前在Activty中包含的大量邏輯操作放到控制層中,避免Activity的臃腫。
MVP的變種有很多,其中使用最廣泛的是Passive View模式,即被動視圖。在這種模式下,整個框架內(nèi)部模塊之間的邏輯操作均由Presenter控制,View僅僅是整個操作的匯報者和結(jié)果接收者,Model根據(jù)Presenter的單向調(diào)用返回數(shù)據(jù)(圖片來自網(wǎng)絡)。并且MVP模式使得View與Model的耦合性更低,降低了Presenter對View的依賴,實現(xiàn)了關(guān)注點分離的初衷,方便開發(fā)人員的編碼和測試工作。
UI層一般包括Activity,F(xiàn)ragment,Adapter等直接和UI相關(guān)的類,UI層的Activity在啟動之后實例化相應的Presenter,App的控制權(quán)后移,由UI轉(zhuǎn)移到Presenter,兩者之間的通信通過BroadCast、Handler或者接口完成,只傳遞事件和結(jié)果。
舉個簡單的例子,UI層通知邏輯層(Presenter)用戶點擊了一個Button,邏輯層(Presenter)自己決定應該用什么行為進行響應,該找哪個模型(Model)去做這件事,最后邏輯層(Presenter)將完成的結(jié)果更新到UI層。

ThinkAndroid Android 快速開發(fā)框架
ThinkAndroid是一個免費的開源的、簡易的、遵循Apache2開源協(xié)議發(fā)布的Android開發(fā)框架,其開發(fā)宗旨是簡單、快速的進行Android應用程序的開發(fā),包含Android mvc、簡易sqlite orm、ioc模塊、封裝Android httpclitent的http模塊,具有快速構(gòu)建文件緩存功能,無需考慮緩存文件的格式,都可以非常輕松的實現(xiàn)緩存,它還基于文件緩存模塊實現(xiàn)了圖片緩存功能,在android中加載的圖片的時候,對oom的問題,和對加載圖片錯位的問題都輕易解決。
他還包括了一個手機開發(fā)中經(jīng)常應用的實用工具類,如日志管理,配置文件管理,android下載器模塊,網(wǎng)絡切換檢測等等工具。
目前ThinkAndroid主要有以下模塊:
| 模塊 | 描述 |
|---|---|
| MVC模塊 | 實現(xiàn)視圖與模型的分離。 |
| ioc模塊 | android中的ioc模塊,完全注解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。 |
| 數(shù)據(jù)庫模塊 | android中的orm框架,使用了線程池對sqlite進行操作。 |
| http模塊 | 通過httpclient進行封裝http數(shù)據(jù)請求,支持異步及同步方式加載。 |
| 緩存模塊 | 通過簡單的配置及設(shè)計可以很好的實現(xiàn)緩存,對緩存可以隨意的配置 |
| 圖片緩存模塊 | imageview加載圖片的時候無需考慮圖片加載過程中出現(xiàn)的oom和android容器快速滑動時候出現(xiàn)的圖片錯位等現(xiàn)象。 |
| 配置器模塊 | 可以對簡易的實現(xiàn)配對配置的操作,目前配置文件可以支持Preference、Properties對配置進行存取。 |
| 日志打印模塊 | 可以較快的輕易的是實現(xiàn)日志打印,支持日志打印的擴展,目前支持對sdcard寫入本地打印、以及控制臺打印 |
| 下載器模塊 | 可以簡單的實現(xiàn)多線程下載、后臺下載、斷點續(xù)傳、對下載進行控制、如開始、暫停、刪除等等。 |
| 網(wǎng)絡狀態(tài)檢測模塊 | 當網(wǎng)絡狀態(tài)改變時,對網(wǎng)絡狀態(tài)進行檢測。 |
afinal Android的快速開發(fā)框架
Afinal 是一個android的sqlite orm 和 ioc 框架。
同時封裝了android中的http框架,使其更加簡單易用;
使用finalBitmap,無需考慮bitmap在android中加載的時候oom的問題和快速滑動的時候圖片加載位置錯位等問題。
Afinal的宗旨是簡潔,快速。約定大于配置的方式。盡量一行代碼完成所有事情。
目前Afinal主要有四大模塊:
| 模塊 | 描述 |
|---|---|
| FinalDB模塊 | android中的orm框架,一行代碼就可以進行增刪改查。支持一對多,多對一等查詢。 |
| FinalActivity模塊 | android中的ioc框架,完全注解方式就可以進行UI綁定和事件綁定。無需findViewById和setClickListener等。 |
| FinalHttp模塊 | 通過httpclient進行封裝http數(shù)據(jù)請求,支持ajax方式加載。 |
| FinalBitmap模塊 | 通過FinalBitmap,imageview加載bitmap的時候無需考慮bitmap加載過程中出現(xiàn)的oom和android容器快速滑動時候出現(xiàn)的圖片錯位等現(xiàn)象。FinalBitmap可以配置線程加載線程數(shù)量,緩存大小,緩存路徑,加載顯示動畫等。FinalBitmap的內(nèi)存管理使用lru算法,沒有使用弱引用(android2.3以后google已經(jīng)不建議使用弱引用,android2.3后強行回收軟引用和弱引用,詳情查看android官方文檔),更好的管理bitmap內(nèi)存。FinalBitmap可以自定義下載器,用來擴展其他協(xié)議顯示網(wǎng)絡圖片,比如ftp等。同時可以自定義bitmap顯示器,在imageview顯示圖片的時候播放動畫等(默認是漸變動畫顯示)。 |
xUtils Android開源框架
xUtils是基于Afinal開發(fā)的目前功能比較完善的一個Android開源框架
xUtils目前主要包括4大模塊:DbUtils, ViewUtils, HttpUtils, BitmapUtils。
包含了很多實用的Android工具;支持大文件上傳,更全面的Http請求協(xié)議支持,擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響;最低兼容Android 2.2 (Api Level 8)。