MVP的使用 + 閃屏頁(yè)廣告

這是一個(gè)用mvp架構(gòu)寫的demo,實(shí)現(xiàn)了閃屏頁(yè)的廣告展示,版本更新彈窗、以及首頁(yè)的Tab和帶下拉刷新與上拉加載更多的列表頁(yè)面,有需要的都可以進(jìn)來(lái)倉(cāng)庫(kù)參考。

周一上線了一版,這些天在討論下一波需求。正好前陣子有一位朋友問我關(guān)于mvp架構(gòu)的問題,所以想寫一篇博客來(lái)講講mvp。 之前剛接觸mvp的時(shí)候,看了很多個(gè)版本,正所謂一百個(gè)人中就有一百個(gè)想法,但總感覺好像都不是我想要的??赡苁俏覜]找到寫得好的吧。

看過很多mvp版本后,基于對(duì)它的理解,寫了自己覺得比較接近它的定義的mvp模式?,F(xiàn)在整理出一個(gè)demo發(fā)出來(lái)供大家參考。來(lái)看看效果圖吧:

ps: 這是閃屏頁(yè)的廣告,進(jìn)入閃屏頁(yè)會(huì)有1.75秒鐘的加載時(shí)間,若數(shù)據(jù)在1.75秒內(nèi)返回并且有廣告,則顯示廣告及倒計(jì)時(shí),否則直接進(jìn)入首頁(yè)。


ps: 這就是首頁(yè)的版本更新彈窗與列表顯示,帶下拉刷新和加載更多。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

其實(shí)mvp就是把傳統(tǒng)的mvc分成三個(gè)模塊,model數(shù)據(jù)模型層、view視圖層 和 presenter邏輯處理層:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?model:作用是獲取數(shù)據(jù)功能,用于網(wǎng)絡(luò)接口的請(qǐng)求與模型解析。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?view :主要是與用戶交互的也頁(yè)面,平時(shí)我們所展示的activity及fragment頁(yè)面,就是管理UI展示的。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?presenter:主要負(fù)責(zé)view層與model層之間的數(shù)據(jù)傳遞,從view層發(fā)出的數(shù)據(jù)需求起,到model層請(qǐng)求后的數(shù)據(jù)返回,它就是一個(gè)中間件。但它不單單只是一個(gè)中間件,它還要處理view層展示的一些邏輯,而view頁(yè)面只需要處理與UI相關(guān)就可以了。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

mvp這樣分的好處就是:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 模型與視圖完全分離,降低耦合度,完全符合高類聚低耦合的思想。? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 代碼更簡(jiǎn)潔,可閱讀性高,利于他人維護(hù)和拓展,降低成本。

萬(wàn)事無(wú)絕對(duì),有利也有弊,它的缺點(diǎn)就是:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 同時(shí)你要寫很多個(gè)類,因?yàn)榛旧厦總€(gè)頁(yè)面就是有自己的model、view、presenter三個(gè)模塊類組成。當(dāng)然了,你也可以不這么寫,你要是覺得類太多太麻煩,那你都寫在一個(gè)類里也可以,你開心就好。但我就擔(dān)心多年后的你再看到你當(dāng)初寫的代碼,估計(jì)連你自己都不認(rèn)識(shí)了,所以這就無(wú)形中填增了維護(hù)的成本。

???2 還有的就是因?yàn)樯婕暗絭iew層與presenter層的交互,要注意實(shí)例的持有,如果的App比較復(fù)雜,頁(yè)面比較多或者層級(jí)比較深的,一不小心就內(nèi)存泄漏了,因?yàn)槿绻鹥resenter層有延時(shí)的操作,尤其是handler和定時(shí)器等,一直持有view層的實(shí)例,那么本來(lái)要回收的頁(yè)面不能被回收,堆積多了,那就造成內(nèi)存泄漏了。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

剛開始我是在presenter的基類里使用弱引用去接收view層的實(shí)例的,但后來(lái)跑小米測(cè)試的時(shí)候,過不去,連軟引用都過不去,所以就使用接口回調(diào)來(lái)做數(shù)據(jù)的傳遞,在view頁(yè)面回收的時(shí)候再將它們斷開。

好了,關(guān)于實(shí)現(xiàn)細(xì)節(jié)我這里就不多說(shuō),一切都在代碼里,大家打開項(xiàng)目地址就能看到demo。

項(xiàng)目地址:https://github.com/weioule/MVPDemo

最后編輯于
?著作權(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閱讀 178,716評(píng)論 25 709
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,897評(píng)論 2 59
  • 轉(zhuǎn)載至:http://www.itdecent.cn/p/9a6845b26856 “Android MVP 詳解...
    SnowDragonYY閱讀 10,409評(píng)論 5 241
  • 拂面兩相看, 曉露挽輕舟。 微風(fēng)香兩岸, 醉似一沙鷗。 愛惹相思逗, 王雁幾時(shí)休。 佳境應(yīng)猶在, 病去空竹留。
    紅楓下的流氓兔閱讀 220評(píng)論 0 2
  • 八個(gè)月沒有回總部了,可能這次心境不同,越接近公司大樓我越顯得有些拘謹(jǐn),遲遲不敢靠近,徘徊在大門口抽完了兩支煙我才再...
    _小栗旬_閱讀 420評(píng)論 1 2

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