Android之App整體架構(gòu)介紹

image.png

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里。

image.png

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層。


image.png

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)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容