![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI5YWZ3gTN5IjMjZ2MvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
App整體架構起源
對程式進行架構設計的原因,歸根到底是為了提高生産力。
通過設計使程式子產品化,做到子產品内部的高聚合和子產品之間的低耦合。這
樣做的好處是使得程式在開發的過程中,開發人員隻需要專注于一點,提高程式開發的效率,并且更容易進行後續的測試以及定位問題。
基于MVP的架構設計思路
mvp的全稱為Model-View-Presenter,Model提供資料,View負責顯示,Controller/Presenter負責邏輯的處理。
在App開發過程中,經常出現的問題就是某一部分的代碼量過大,雖然做了子產品劃分和接口隔離,但也很難完全避免。
從實踐中看到,這更多的出現在UI部分,也就是Activity裡。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI5YWZ3gTN5IjMjZ2MvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
MVP是一種使用廣泛的基礎架構模式,使用基于事件驅動的應用架構。
MVP從更早的MVC架構演變過來的一種架構,與MVC有一定的相似性。
MVP架構由3部分組成:View負責顯示,Presenter負責邏輯處理,Model提供資料。
MVP與MVC之間最主要的差別在控制層上,在MVP架構中,View與Model并不直接互動,所有的互動放在Presenter中;而在MVC裡,View與Model會直接産生一定的互動。
MVP的Presenter是架構的控制者,承擔了大量的邏輯操作,而MVC的Controller更多時候承擔一種轉發的作用。是以在App中引入MVP的原因,是為了将此前在Activty中包含的大量邏輯操作放到控制層中,避免Activity的臃腫。
MVP的變種有很多,其中使用最廣泛的是Passive View模式,即被動視圖。在這種模式下,整個架構内部子產品之間的邏輯操作均由Presenter控制,View僅僅是整個操作的彙報者和結果接收者,Model根據Presenter的單向調用傳回資料(圖檔來自網絡)。并且MVP模式使得View與Model的耦合性更低,降低了Presenter對View的依賴,實作了關注點分離的初衷,友善開發人員的編碼和測試工作。
UI層一般包括Activity,Fragment,Adapter等直接和UI相關的類,UI層的Activity在啟動之後執行個體化相應的Presenter,App的控制權後移,由UI轉移到Presenter,兩者之間的通信通過BroadCast、Handler或者接口完成,隻傳遞事件和結果。
舉個簡單的例子,UI層通知邏輯層(Presenter)使用者點選了一個Button,邏輯層(Presenter)自己決定應該用什麼行為進行響應,該找哪個模型(Model)去做這件事,最後邏輯層(Presenter)将完成的結果更新到UI層。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI5YWZ3gTN5IjMjZ2MvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
ThinkAndroid Android 快速開發架構
ThinkAndroid是一個免費的開源的、簡易的、遵循Apache2開源協定釋出的Android開發架構,其開發宗旨是簡單、快速的進行Android應用程式的開發,包含Android mvc、簡易sqlite orm、ioc子產品、封裝Android httpclitent的http子產品,具有快速建構檔案緩存功能,無需考慮緩存檔案的格式,都可以非常輕松的實作緩存,它還基于檔案緩存子產品實作了圖檔緩存功能,在android中加載的圖檔的時候,對oom的問題,和對加載圖檔錯位的問題都輕易解決。
他還包括了一個手機開發中經常應用的實用工具類,如日志管理,配置檔案管理,android下載下傳器子產品,網絡切換檢測等等工具。
目前ThinkAndroid主要有以下子產品:
子產品
描述
MVC子產品
實作視圖與模型的分離。
ioc子產品
android中的ioc子產品,完全注解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。
資料庫子產品
android中的orm架構,使用了線程池對sqlite進行操作。
http子產品
通過httpclient進行封裝http資料請求,支援異步及同步方式加載。
緩存子產品
通過簡單的配置及設計可以很好的實作緩存,對緩存可以随意的配置
圖檔緩存子產品
imageview加載圖檔的時候無需考慮圖檔加載過程中出現的oom和android容器快速滑動時候出現的圖檔錯位等現象。
配置器子產品
可以對簡易的實作配對配置的操作,目前配置檔案可以支援Preference、Properties對配置進行存取。
日志列印子產品
可以較快的輕易的是實作日志列印,支援日志列印的擴充,目前支援對sdcard寫入本地列印、以及控制台列印
下載下傳器子產品
可以簡單的實作多線程下載下傳、背景下載下傳、斷點續傳、對下載下傳進行控制、如開始、暫停、删除等等。
網絡狀态檢測子產品
當網絡狀态改變時,對網絡狀态進行檢測。
afinal Android的快速開發架構
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資料請求,支援ajax方式加載。
FinalBitmap子產品
通過FinalBitmap,imageview加載bitmap的時候無需考慮bitmap加載過程中出現的oom和android容器快速滑動時候出現的圖檔錯位等現象。FinalBitmap可以配置線程加載線程數量,緩存大小,緩存路徑,加載顯示動畫等。FinalBitmap的記憶體管理使用lru算法,沒有使用弱引用(android2.3以後google已經不建議使用弱引用,android2.3後強行回收軟引用和弱引用,詳情檢視android官方文檔),更好的管理bitmap記憶體。FinalBitmap可以自定義下載下傳器,用來擴充其他協定顯示網絡圖檔,比如ftp等。同時可以自定義bitmap顯示器,在imageview顯示圖檔的時候播放動畫等(預設是漸變動畫顯示)。
xUtils Android開源架構
xUtils是基于Afinal開發的目前功能比較完善的一個Android開源架構
xUtils目前主要包括4大子產品:DbUtils, ViewUtils, HttpUtils, BitmapUtils。
包含了很多實用的Android工具;支援大檔案上傳,更全面的Http請求協定支援,擁有更加靈活的ORM,更多的事件注解支援且不受混淆影響;最低相容Android 2.2 (Api Level 8)。