1. 程式人生 > >MVP的使用 + 閃屏頁廣告

MVP的使用 + 閃屏頁廣告

這是一個用mvp架構寫的demo,實現了閃屏頁的廣告展示,版本更新彈窗、以及首頁的Tab和帶下拉重新整理與上拉載入更多的列表頁面,有需要的都可以進來倉庫參考。

週一上線了一版,這些天在討論下一波需求。正好前陣子有一位朋友問我關於mvp架構的問題,所以想寫一個demo來講講mvp。 之前剛接觸mvp的時候,看了很多個版本,正所謂一百個人中就有一百個想法,但總感覺好像都不是我想要的。可能是我沒找到寫得好的吧。

看過很多mvp版本後,基於對它的理解,寫了自己覺得比較接近它的定義的mvp模式。現在整理出一個demo發出來供大家參考。來看看效果圖吧:

image  image                 

ps: 這是閃屏頁的廣告,進入閃屏頁會有1.75秒鐘的載入時間,若資料在1.75秒內返回並且有廣告,則顯示廣告及倒計時,否則直接進入首頁。

 

image  image

ps: 這就是首頁的版本更新彈窗與列表顯示,帶下拉重新整理和載入更多。                                                                                                                                                                                                                                                                                                          

其實mvp就是把傳統的mvc分成三個模組,model資料模型層、view檢視層 和 presenter邏輯處理層: 
   model:作用是獲取資料功能,用於網路介面的請求與模型解析。 
   view :主要是與使用者互動的也頁面,平時我們所展示的activity及fragment頁面,就是管理UI展示的。 
   presenter:主要負責view層與model層之間的資料傳遞,從view層發出的資料需求起,到model層請求後的資料返回,它就是一箇中間件。但它不單單只是一箇中間件,它還要處理view層展示的一些邏輯,而view頁面只需要處理與UI相關就可以了。                                                                                                                                                                                                               

mvp這樣分的好處就是: 
   1 模型與檢視完全分離,降低耦合度,完全符合高類聚低耦合的思想。 
   2 程式碼更簡潔,可閱讀性高,利於他人維護和拓展,降低成本。

萬事無絕對,有利也有弊,它的缺點就是: 
   1 同時你要寫很多個類,因為基本上每個頁面就是有自己的model、view、presenter三個模組類組成。當然了,你也可以不這麼寫,你要是覺得類太多太麻煩,那你都寫在一個類裡也可以,你開心就好。但我就擔心多年後的你再看到你當初寫的程式碼,估計連你自己都不認識了,所以這就無形中填增了維護的成本。 
   2 還有的就是因為涉及到view層與presenter層的互動,要注意例項的持有,如果的App比較複雜,頁面比較多或者層級比較深的,一不小心就記憶體洩漏了,因為如果presenter層有延時的操作,尤其是handler和定時器等,一直持有view層的例項,那麼本來要回收的頁面不能被回收,堆積多了,那就造成記憶體洩漏了。                                                                                                                                                                                                                                                                                                            

剛開始我是在presenter的基類裡使用弱引用去接收view層的例項的,但後來跑小米測試的時候,過不去,連軟引用都過不去,所以就使用介面回撥來做資料的傳遞,在view頁面回收的時候再將它們斷開。

好了,關於實現細節我這裡就不多說,一切都在程式碼裡,大家開啟專案地址就能看到demo。

專案地址:https://github.com/weioule/MVPDemo