天天看點

android app開發架構,Android之App整體架構介紹

android app開發架構,Android之App整體架構介紹

image.png

App整體架構起源

對程式進行架構設計的原因,歸根到底是為了提高生産力。

通過設計使程式子產品化,做到子產品内部的高聚合和子產品之間的低耦合。這

樣做的好處是使得程式在開發的過程中,開發人員隻需要專注于一點,提高程式開發的效率,并且更容易進行後續的測試以及定位問題。

基于MVP的架構設計思路

mvp的全稱為Model-View-Presenter,Model提供資料,View負責顯示,Controller/Presenter負責邏輯的處理。

在App開發過程中,經常出現的問題就是某一部分的代碼量過大,雖然做了子產品劃分和接口隔離,但也很難完全避免。

從實踐中看到,這更多的出現在UI部分,也就是Activity裡。

android app開發架構,Android之App整體架構介紹

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

android app開發架構,Android之App整體架構介紹

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