APP項(xiàng)目完整搭建小結(jié)

前言
最近公司在開發(fā)一個(gè)新的 app。個(gè)人決定使用一套完整的項(xiàng)目架構(gòu)來(lái)實(shí)現(xiàn)這個(gè) app,以將學(xué)習(xí)運(yùn)用到生產(chǎn)環(huán)境以及學(xué)會(huì)真正從全局高度來(lái)設(shè)計(jì)一個(gè)架構(gòu)合理,邏輯清晰,擴(kuò)展性強(qiáng),代碼優(yōu)美的產(chǎn)品,并且能達(dá)到任務(wù)書的需求。

框架選擇

因開發(fā)的為 音樂(lè)播放器 類型的 app。根據(jù)以往經(jīng)驗(yàn),需要使用一個(gè) 播放音樂(lè)的 Service 與多個(gè)界面進(jìn)行交互。Service 的作用有與 c++ 播放器交互從而播放音樂(lè),獲取狀態(tài),回調(diào)狀態(tài)給 UI,資源出錯(cuò)處理。
界面的作用主要是展現(xiàn)數(shù)據(jù),提供操作,顯示狀態(tài)。

根據(jù)個(gè)人對(duì)比 MVP 以及 MVVM 兩種項(xiàng)目架構(gòu)。更傾向于使用 MVP 來(lái)進(jìn)行項(xiàng)目的搭建。因?yàn)榭偢杏X(jué)在 xml 中 binding 數(shù)據(jù)對(duì)象不符合于 xml 只做數(shù)據(jù)展現(xiàn),而不做邏輯處理 這個(gè)個(gè)人認(rèn)為的觀念。 MVP 存在的問(wèn)題就是整個(gè)項(xiàng)目的類會(huì)偏多,重復(fù)的創(chuàng)建相似結(jié)構(gòu)的操作比較多,但是對(duì)于結(jié)構(gòu)清晰的項(xiàng)目,這個(gè)不會(huì)作為首要問(wèn)題。

MVP 的封裝 待寫

對(duì)于項(xiàng)目的分包,個(gè)人傾向于按照 功能模塊分包 。而一些共同的如工具類、網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫(kù)操作、bean 對(duì)象則按照文件類型分包??偟脑瓌t是 大方向按照文件類型分包,具體功能按照模塊分包

項(xiàng)目分包的示例 待寫

網(wǎng)絡(luò)請(qǐng)求決定使用 Square 全家桶 OkHttp3, Retrofit2.0 結(jié)合 Rxjava 來(lái)完成。對(duì)于這三個(gè)工具的使用,以后詳述。

OkHttp3 及 Intercept 的使用 待寫

RESTFull 和 Retrofit2.0 待寫

Rxjava的簡(jiǎn)單使用及操作符的示例 待寫

圖片加載本來(lái)準(zhǔn)備使用 Square 公司的 fresco,后來(lái)被使用 glide。個(gè)人更傾向于 picasso(因?yàn)槠涿指咴?shī)意)。后期有機(jī)會(huì)做個(gè)使用方法對(duì)比,封裝替換以及三者的比較。

Fresco、Glide、Picasso對(duì)比 待寫

數(shù)據(jù)庫(kù)目前使用的為 LiteOrm,因?yàn)楦鼮槭煜?,后期?xiàng)目可能會(huì)替換為 GreenDao,并使用加密的數(shù)據(jù)庫(kù)。使用數(shù)據(jù)庫(kù)為了保存帳號(hào)信息,緩存數(shù)據(jù)信息,默認(rèn)配置

GreenDao3、GreenDao2 與 LiteOrm的比較 待寫

ButterKnife與Annotation及其原理APT的學(xué)習(xí) 待寫

數(shù)據(jù)分析

難點(diǎn)分析

使用環(huán)境的網(wǎng)絡(luò)狀態(tài)多為弱網(wǎng)情況,為了讓用戶驗(yàn)盡可能流暢,做了一些處理:

  1. 播放界面的播放按鈕的顯示

  2. 網(wǎng)絡(luò)數(shù)據(jù)緩存

  3. 收藏/取消收藏請(qǐng)求緩存

  4. 弱網(wǎng)重復(fù)請(qǐng)求播放
    最先是寫在界面,存在的問(wèn)題是界面銷毀時(shí)請(qǐng)求需要取消,打開下一個(gè)界面時(shí)又需要繼續(xù)發(fā)起請(qǐng)求

  5. 音頻廣告插入

  6. 賬號(hào)切換及多終端登錄

  7. 實(shí)時(shí)監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的變化

經(jīng)驗(yàn)總結(jié)(踩過(guò)的坑)

  • Service 的生命周期

  • 沒(méi)有執(zhí)行的 unBind() 的 Service 不會(huì)銷毀

  • aidl 文件不能刪除前面的方法

  • 對(duì)于需要對(duì)外提供的 aidl, 最好的辦法是專門做一套代碼專用

  • 對(duì)于通過(guò)源碼依賴的第三方項(xiàng)目,自己寫的功能獨(dú)立,代碼龐大的項(xiàng)目,需要?jiǎng)?chuàng)建一個(gè) module,并使工程主 module 依賴于該 module,而該 module 則完全不依賴于工程主 module

  • 項(xiàng)目框架的搭建不是一蹴而就,在整體確定的前提下,代碼量不多的地方可以編寫到一個(gè)人間,等到后續(xù)需求明確或增加在做持續(xù)的重構(gòu),優(yōu)化。根據(jù)項(xiàng)目的需求來(lái)使用更合適合適的方式實(shí)現(xiàn)。總的宗旨是 該使用 interface 的使用 interface, 該抽取到父類的抽取到父類,該創(chuàng)建獨(dú)立功能的創(chuàng)建獨(dú)立功能

  • 對(duì)泛型的合理使用會(huì)使代碼量更少,代碼層次更優(yōu)美

后續(xù)優(yōu)化

  • 抽取公用的代碼成一個(gè)獨(dú)立的 module

  • 數(shù)據(jù)庫(kù)使用 GreenDao

  • 夜間模式

  • 日志分析,日志上傳

總結(jié)

  • dex 分包解決 65k 問(wèn)題

  • 一個(gè)界面對(duì)應(yīng)多個(gè) Presenter 的問(wèn)題和一個(gè) Presenter 對(duì)應(yīng)多個(gè) Module 的問(wèn)題

  • 懂再多的框架,開源項(xiàng)目的使用終會(huì)跟不上潮流,要明白更本質(zhì)的原理,思想,設(shè)計(jì)模式。

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

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,062評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,376評(píng)論 4 61
  • 人類是講究“師出有名”的物種。 工作壓力大,生活沉悶無(wú)樂(lè)趣,想去世界浪一浪,怎么辦?寫一封最美辭職信--世界很大,...
    李小穆閱讀 519評(píng)論 4 13
  • 兩個(gè)小時(shí)前,收到兄弟發(fā)來(lái)的微信:今天無(wú)意中找到的;下面配上一張照片,一張褶皺的紙條上寫著幾行文字——一切都是可以改...
    清空Q閱讀 406評(píng)論 0 0
  • 王相宜11月份第一次讀書打卡,我讀的書是“假如給我三天光明”,我賭了一86頁(yè)到115頁(yè),我喜歡的句子是,我曾經(jīng)努力...
    祥頤閱讀 252評(píng)論 0 0

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