package com.android.app_base.base.viewmodel; import android.app.Application; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.StateViewEnum; import com.android.app_base.base.model.BaseModel; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; /** * ViewModel基类 */ public abstract class BaseViewModel extends AndroidViewModel implements DefaultLifecycleObserver { protected Application application; /** * 数据仓库model */ protected M model; /** * 控制状态视图的LiveData */ protected MutableLiveData stateViewLiveData = new MutableLiveData<>(); protected MutableLiveData messageLiveData = new MutableLiveData<>(); //管理RxJava,主要针对RxJava异步操作造成的内存泄漏 private CompositeDisposable mCompositeDisposable; public BaseViewModel(@NonNull Application application) { super(application); this.application = application; model = initModel(); mCompositeDisposable = new CompositeDisposable(); } /** * 数据仓库初始化,由子类实现返回 */ protected abstract M initModel(); /** * Rxjava的异步操作都要调用此方法添加到 mCompositeDisposable里, */ protected void addSubscribe(Disposable disposable) { if (mCompositeDisposable == null) { mCompositeDisposable = new CompositeDisposable(); } mCompositeDisposable.add(disposable); } /** * 获取状态视图LiveData */ public LiveData getStateViewLiveData() { if(stateViewLiveData == null){ stateViewLiveData = new MutableLiveData<>(); } return stateViewLiveData; } public MutableLiveData getMessageLivaData(){ if(messageLiveData == null){ messageLiveData = new MutableLiveData<>(); } return messageLiveData; } /** * 更改状态视图的状态 */ public void changeStateView(StateViewEnum state) { stateViewLiveData.postValue(state); } @Override protected void onCleared() { super.onCleared(); if (model != null) { model.onCleared(); } //ViewModel销毁时会执行,同时取消所有异步任务 if (mCompositeDisposable != null) { mCompositeDisposable.clear(); } } /** * 子类可以重写生命周期方法,便于生命周期的考虑 */ @Override public void onCreate(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onCreate(owner); } @Override public void onStart(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onStart(owner); } @Override public void onResume(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onResume(owner); } @Override public void onPause(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onPause(owner); } @Override public void onStop(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onStop(owner); } @Override public void onDestroy(@NonNull LifecycleOwner owner) { DefaultLifecycleObserver.super.onDestroy(owner); } protected void onCreate(Bundle savedInstanceState) { } }