如何設(shè)計(jì)app的架構(gòu)
一、明確App類型與特點(diǎn)
要設(shè)計(jì)App的整體框架,首先要明確我們所開發(fā)的App的類型和特點(diǎn)。通常,App可分為數(shù)據(jù)展示型、手機(jī)助手類和游戲類等。不同類型的App在網(wǎng)絡(luò)交互數(shù)據(jù)的方式上也有所不同。二、網(wǎng)絡(luò)交互方式概述

三、職責(zé)劃分與工作流程
成熟的商業(yè)應(yīng)用的網(wǎng)絡(luò)調(diào)用一般遵循以下流程:UI發(fā)起請(qǐng)求-檢查緩存-調(diào)用網(wǎng)絡(luò)模塊-解析返回JSON/統(tǒng)一處理異常- JSON對(duì)象映射為Java對(duì)象-緩存- UI獲取數(shù)據(jù)并展示。這其中涉及數(shù)據(jù)獲取、數(shù)據(jù)管理和數(shù)據(jù)展示三個(gè)核心職責(zé)。四、傳統(tǒng)的Android App架構(gòu)
Android最原生且基礎(chǔ)的架構(gòu)可以理解為MVC。Controller即Activity和Fragment掌握著Android系統(tǒng)中絕大多數(shù)的資源,并在內(nèi)部直接控制View。傳統(tǒng)的Android App架構(gòu)一般以Activity和Fragment為核心,將網(wǎng)絡(luò)模塊、數(shù)據(jù)庫管理模塊等分離成若干工具類包,供Activity和Fragment調(diào)用。優(yōu)點(diǎn)與缺點(diǎn)分析
優(yōu)點(diǎn):這種架構(gòu)開發(fā)簡單,以頁面為導(dǎo)向。當(dāng)項(xiàng)目實(shí)現(xiàn)模塊化時(shí),基于Activity和Fragment這兩個(gè)核心,很多任務(wù)可以直接完成,無需繞路。 缺點(diǎn):隨著業(yè)務(wù)邏輯的復(fù)雜化,維護(hù)難度增加。因?yàn)橐皂撁鏋閷?dǎo)向,一些共用的業(yè)務(wù)邏輯可能需要重復(fù)編寫。測試也相對(duì)困難,因?yàn)閿?shù)據(jù)處理通常在Activity和Fragment中進(jìn)行。當(dāng)業(yè)務(wù)復(fù)雜時(shí),Activity和Fragment的代碼量可能激增。 以電商App的購物車功能為例,當(dāng)業(yè)務(wù)邏輯逐漸增多,如優(yōu)惠券、滿減、運(yùn)費(fèi)計(jì)算等,CartActivity的代碼量可能會(huì)激增,導(dǎo)致維護(hù)困難。一、Activity與Fragment的數(shù)據(jù)處理痛點(diǎn)
我們注意到,Activity和Fragment承擔(dān)了過多的數(shù)據(jù)處理邏輯,這并非其職責(zé)所在。為了提高應(yīng)用的質(zhì)量和效率,我們需要重新審視這一設(shè)計(jì)思路。

二、分層架構(gòu)的探索與實(shí)踐
審視我們的項(xiàng)目,會(huì)發(fā)現(xiàn)許多數(shù)據(jù)處理代碼并不需要Activity和Fragment的資源。多個(gè)頁面往往需要共享數(shù)據(jù)和請(qǐng)求邏輯。例如,全局的User對(duì)象就是一個(gè)典型的例子。為了提升復(fù)用性,我們可以將這些全局?jǐn)?shù)據(jù)源的數(shù)據(jù)處理邏輯統(tǒng)一抽離出來,形成一層獨(dú)立的數(shù)據(jù)管理層——DataManager層。這樣,上層只需關(guān)注數(shù)據(jù)接口,無需關(guān)心數(shù)據(jù)的具體來源。
三、包結(jié)構(gòu)的設(shè)計(jì)
在項(xiàng)目中實(shí)施上述策略后,Activity和Fragment的角色將發(fā)生轉(zhuǎn)變。它們不再承擔(dān)數(shù)據(jù)處理責(zé)任,而是持有DataManager的引用,專注于數(shù)據(jù)的展示和傳遞。這樣,Activity和Fragment更加輕量化,專注于本職工作,不再進(jìn)行網(wǎng)絡(luò)請(qǐng)求和緩存讀寫。
四、開發(fā)app的成本考量

根據(jù)最新數(shù)據(jù),開發(fā)一個(gè)app的成本因功能、復(fù)雜度和開發(fā)團(tuán)隊(duì)能力而異,大致幾萬到幾百萬不等。簡單的應(yīng)用修改前臺(tái)UI頁面,可能只需一兩天和幾千元。但對(duì)于功能全面、復(fù)雜的app,開發(fā)費(fèi)用可能高達(dá)幾十萬。無論是安卓還是IOS,都有相應(yīng)的開發(fā)團(tuán)隊(duì)能夠承包。
五、軟件維護(hù)與保養(yǎng)
除了開發(fā)成本,app的維護(hù)和保養(yǎng)同樣重要。手機(jī)軟件的維護(hù)方法很多與計(jì)算機(jī)相似。例如,安裝App后應(yīng)立即刪除無用的安裝包,定期清理緩存,避免占用存儲(chǔ)空間并減少卡頓。用戶應(yīng)養(yǎng)成及時(shí)關(guān)閉不用程序的習(xí)慣,雖然安卓系統(tǒng)會(huì)自動(dòng)管理,但手動(dòng)結(jié)束進(jìn)程有助于手機(jī)高效運(yùn)轉(zhuǎn)并防止流量浪費(fèi)。
這樣的設(shè)計(jì)和維護(hù)策略,不僅能提升app的性能和用戶體驗(yàn),還能有效管理開發(fā)成本和維護(hù)工作。
開發(fā)Android App的架構(gòu)概覽
一、基礎(chǔ)架構(gòu)模塊

1. 異步下載與圖像處理
App開發(fā)中常涉及JSON、圖像等的異步下載。這意味著在后臺(tái)線程中進(jìn)行數(shù)據(jù)的獲取與圖像處理,以保證UI的流暢性。2. 網(wǎng)絡(luò)請(qǐng)求管理
有效的網(wǎng)絡(luò)請(qǐng)求管理包括排序(scheduling)、優(yōu)先級(jí)處理以及多級(jí)別取消請(qǐng)求等功能,這些都是為了保證數(shù)據(jù)的高效獲取。3. 緩存機(jī)制
為了提高App的性能和響應(yīng)速度,緩存機(jī)制是不可或缺的一部分。它可以存儲(chǔ)近期使用或經(jīng)常使用的數(shù)據(jù),減少重復(fù)的網(wǎng)絡(luò)請(qǐng)求。二、網(wǎng)絡(luò)請(qǐng)求庫 - android-async-http
這個(gè)庫提供了更為細(xì)化的網(wǎng)絡(luò)請(qǐng)求處理功能:1. 回調(diào)機(jī)制

2. 線程管理
在UI線程外進(jìn)行http請(qǐng)求,避免了主線程阻塞,保證了應(yīng)用的響應(yīng)性。3. 高級(jí)功能
包括文件斷點(diǎn)上傳、智能重試、默認(rèn)gzip壓縮以及Json格式支持等,這些功能大大簡化了網(wǎng)絡(luò)請(qǐng)求的處理難度。三、Afinal框架
Afinal框架主要包括四大模塊:1. 數(shù)據(jù)庫模塊
提供了一個(gè)android中的orm框架,使用線程池操作sqlite,更加高效和便捷。2. 注解模塊

3. 網(wǎng)絡(luò)模塊
封裝了httpclient進(jìn)行http數(shù)據(jù)請(qǐng)求,支持ajax方式加載和文件下載、上傳功能。4. 圖片緩存模塊
通過FinalBitmap等技術(shù),解決了bitmap加載過程中的oom問題和快速滑動(dòng)時(shí)的圖片錯(cuò)位現(xiàn)象。四、xUtils框架
xUtils同樣包含了四大核心模塊:1. 簡化數(shù)據(jù)庫操作
提供了便捷的orm框架,一行代碼即可完成數(shù)據(jù)庫的增刪改查。2. 注解驅(qū)動(dòng)的UI綁定

3. 靈活的網(wǎng)絡(luò)請(qǐng)求
支持同步和異步的網(wǎng)絡(luò)請(qǐng)求方式,滿足不同的需求。4. 圖片加載優(yōu)化
優(yōu)化了圖片加載過程,避免了常見的圖片加載問題。五、ThinkAndroid框架的核心模塊
ThinkAndroid主要包括以下幾個(gè)核心模塊:1. MVC架構(gòu)
實(shí)現(xiàn)了視圖與模型的分離,使代碼結(jié)構(gòu)更為清晰。2. ioc容器

3. 擴(kuò)展的數(shù)據(jù)庫操作
提供了orm框架,并使用了線程池操作sqlite。4. http數(shù)據(jù)請(qǐng)求封裝
通過httpclient封裝http數(shù)據(jù)請(qǐng)求,支持異步及同步方式。這些框架和庫都為Android App的開發(fā)提供了強(qiáng)大的支持和便利的工具,使得開發(fā)者能夠更高效地構(gòu)建功能豐富、性能優(yōu)越的App。LoonAndroid框架的主要模塊介紹
一、自動(dòng)注入框架

僅需繼承框架內(nèi)的application,即可輕松實(shí)現(xiàn)功能的自動(dòng)注入。
這一模塊讓開發(fā)者無需進(jìn)行復(fù)雜的配置和編碼,只需簡單的繼承操作,即可享受到框架帶來的便捷。
二、圖片加載框架
多重緩存,自動(dòng)回收,確保內(nèi)存安全。
該模塊專注于圖片的加載和處理。通過多重緩存機(jī)制,有效管理圖片資源,避免因圖片加載導(dǎo)致的內(nèi)存溢出問題,同時(shí)保證圖片的快速展示。

三、網(wǎng)絡(luò)請(qǐng)求模塊
集成當(dāng)前主流的HTTP請(qǐng)求方式。
該模塊提供了豐富的網(wǎng)絡(luò)請(qǐng)求功能,開發(fā)者無需單獨(dú)集成多個(gè)庫,即可實(shí)現(xiàn)常見的網(wǎng)絡(luò)操作,如GET、POST等。
四、EventBus集成
一個(gè)流行的開源總線框架。

通過集成EventBus,LoonAndroid為開發(fā)者提供了更為便捷的處理機(jī)制,實(shí)現(xiàn)組件間的解耦,簡化開發(fā)流程。
五、驗(yàn)證框架(集成開源框架)
提供強(qiáng)大的驗(yàn)證功能。
該模塊集成了開源驗(yàn)證框架,為開發(fā)者提供用戶注冊(cè)、登錄等場景下的驗(yàn)證需求,簡化開發(fā)流程。
六、JSON解析

支持將JSON數(shù)據(jù)解析為集合或?qū)ο蟆?/h3>
該模塊提供強(qiáng)大的JSON解析功能,方便開發(fā)者處理前后端數(shù)據(jù)交互時(shí)的JSON數(shù)據(jù)。
七、數(shù)據(jù)庫模塊(未知作者)
為數(shù)據(jù)存儲(chǔ)提供穩(wěn)定支持。
盡管我們暫時(shí)不知道這一模塊的作者是誰,但其在LoonAndroid中的作用不可忽視,為開發(fā)者提供便捷的數(shù)據(jù)存儲(chǔ)和查詢功能。

八、多線程斷點(diǎn)下載模塊
智能判斷支持多線程與重定向。
該模塊為文件下載提供了強(qiáng)大的支持,尤其是大文件下載時(shí),能夠智能判斷并處理多線程下載和重定向問題。
九、自動(dòng)更新模塊
實(shí)現(xiàn)應(yīng)用的自動(dòng)檢測和更新。

此模塊幫助開發(fā)者實(shí)現(xiàn)應(yīng)用的自動(dòng)檢測更新,為用戶提供及時(shí)的應(yīng)用更新體驗(yàn)。
十、一系列工具類
提供豐富的開發(fā)工具,簡化開發(fā)流程。
這一模塊包含了許多實(shí)用的工具類,如緩存工具、日志打印工具、配置工具等,幫助開發(fā)者更加高效地開發(fā)應(yīng)用。
總體來看,LoonAndroid框架通過其豐富的模塊和強(qiáng)大的功能,為開發(fā)者提供了全面的支持,大大簡化了開發(fā)流程。
