文章分為以下三個部分
一 .MVP 的概念
二 .MVP 的優(yōu)缺點(diǎn)
三 .MVP 解決存在的問題
一 MVP 的概念

MVP 簡單介紹
View層只負(fù)責(zé)視圖的顯示以及更新
Model只負(fù)責(zé)數(shù)據(jù)的獲?。ㄈ缇W(wǎng)絡(luò)請求等)
Presenter層則是負(fù)責(zé)View和Model通信的橋梁,接收model請求的結(jié)果后返回給View,或者接收View層的信息后到Model層進(jìn)行請求,以及一些邏輯
二 MVP優(yōu)缺點(diǎn)
MVP優(yōu)點(diǎn):
模型與視圖完全分離,我們可以修改視圖而不影響模型;
可以更高效地使用模型,因?yàn)樗械慕换ザ及l(fā)生在一個地方——Presenter內(nèi)部;
我們可以將一個Presenter用于多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因?yàn)橐晥D的變化總是比模型的變化頻繁;
如果我們把邏輯放在Presenter中,那么我們就可以脫離用戶接口來測試這些邏輯(單元測試)。
MVP缺點(diǎn):
視圖和Presenter的交互會過于頻繁,使得他們的聯(lián)系過于緊密。也就是說,一旦視圖變更了,presenter也要變更。
三 MVP 解決存在的問題
1.會造成接口類爆炸問題。使用MVP模式去構(gòu)建項(xiàng)目,會造成類文件和接口文件的過多,進(jìn)而增大包的體積
解決 寫一個Contract接口,然后把與MVP相關(guān)接口全部列入到里面去
2.會造成內(nèi)存泄漏的問題。當(dāng)用戶關(guān)閉了View層,但這時Model層如果仍然在進(jìn)行耗時操作,因?yàn)镻resenter層也持有View層的引用,所以造成垃圾回收器無法對View層進(jìn)行回收,這樣一來,就造成了內(nèi)存泄漏。
解決 可以重寫onDestroy()方法,在View銷毀時強(qiáng)制回收掉Presenter;或是采用弱引用的方式
(引用進(jìn)行引用之前,都需要判斷引用不為空,以防止空指針異常。)