日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android框架之MVP实践简单万花筒

發布時間:2023/12/16 Android 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android框架之MVP实践简单万花筒 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? Android官方早期中其實沒有所謂的MVC框架,在我還是新手的時候,一個完整的Android項目其實是很混亂的,傳統的MVC框架在Android上體現的不是很明顯。最近在看了MVP框架自己動手寫了以下發現MVP在Android中其實更像是傳統的MVC。

? MVP框架可以讓UI界面和數據分離,我們的應用至少可以分為3層,這樣使我們對這三層進行單獨的單元測試,MVP模式可以讓我們從Activity,Fragment等View角色中分離大部分代碼,使得每個類型的代碼量大幅度減少,職責單一,易于維護。

MVP中的三個角色

Presenter 交互中間人

Presenter主要作為溝通View和Model的橋梁,它從Model層檢索數據后,返回給View層,使得View和Model之間沒有耦合,也將業務邏輯從View角色中抽離出來

View-用戶界面

View通常指的Activity,Fragment,或者某個View控件,它含有一個Presenter(也可以擁有多個)成員變量。通常View需要實現一個邏輯接口,將View上的操作通過轉交給Presenter進行實現,最后,Presenter調用View邏輯接口將結果返回給View元素。

Model 數據的存儲

Model角色主要是提供數據的存儲功能,Presenter需要通過Model層存儲,獲取數據,Model就像一個數據倉庫,Model更想封裝了數據庫Dao或者網絡獲取數據的角色。

MVP框架的封裝

在使用MVP框架中,Presenter會持有Activity的強引用,在使用中經常會出現耗時操作,我們需要將Presenter中來綁定Activity Fragment的生命周期。我們采用的是弱引用和Activity fragment的生命周期來解決你這個問題,首先我們建立一個抽象Presenter

public abstract class BasePresenter<T> {protected Reference<T> viewRef;public void attachView(T view) {viewRef = new WeakReference<T>(view);}protected T getView() {return viewRef.get();}public boolean isViewAttached() {return viewRef != null && viewRef.get();}public void detachView() {if (viewRef != null) {viewRef.clear();viewRef = null;}} }


BasePresenter 有4個方法,分別是View建立關聯,解除關聯,判斷是否與View建立關聯,獲取View。View的類型通過泛型來傳遞,presenter持有一個View的弱引用。通常這個View的類型應該是一個實現了某個特定接口的Activity或者Fragment等類型。

public abstract class MVPBaseActivity<V, T extends BasePresenter<V>> extends Activity {protected T presenter;protected void onCreate(Bundle saveInstanceState) {super.onCreate();presenter = createPresenter();presenter.attachView((V) this);}protected void onDestroy() {super.onDestory();presenter.detachView();}protected abstract T createPresenter();}

MVPBaseActivity 里面有兩個泛型類型,一個是View接口類型,第二個是Presenter的具體類型。通過泛型參數,將一些通用的邏輯抽象到MVPBaseActivity里面,比如我們在抽象類中將Presenter 與View的邏輯直接完成,在子類繼承父類的時候只需要實現抽象方法createPresenter即可完成綁定,調用父類的super.onCreate() 完成綁定,調用父類的super.onDestory()則會解除綁定。

通過繼承MVPBaseActivity,實現抽象方法來完成MVP框架,代碼如下有刪減。

/*** A login screen that offers login via email/password.*/public class LoginActivity extends MVPBaseActivity<ILoginView, LoginPresenter> implements ILoginView, View.OnClickListener {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);ButterKnife.bind(this);initListener();initToolBar();}@Overrideprotected LoginPresenter createPresenter() {return new LoginPresenter(this);}@Overridepublic void loginFail() {showLoading(false);Toast.makeText(this, "loginFail", Toast.LENGTH_SHORT).show();}@Overridepublic void loginSuccess(User user) {showLoading(false);Toast.makeText(this, "loginSuccess", Toast.LENGTH_SHORT).show();setData(user);}}

總結

以上是生活随笔為你收集整理的Android框架之MVP实践简单万花筒的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。