package com.android.app_base.base.viewmodel;
|
|
import android.app.Application;
|
|
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 org.reactivestreams.Subscriber;
|
|
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.Disposable;
|
|
/**
|
* ViewModel基类
|
*/
|
public abstract class BaseViewModel<M extends BaseModel> extends AndroidViewModel implements DefaultLifecycleObserver {
|
|
protected Application application;
|
/**
|
* 数据仓库model
|
*/
|
protected M model;
|
/**
|
* 控制状态视图的LiveData
|
*/
|
protected MutableLiveData<StateViewEnum> stateViewLiveData;
|
protected MutableLiveData<String> messageLiveData;
|
//管理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<StateViewEnum> getStateViewLiveData() {
|
if(stateViewLiveData == null){
|
stateViewLiveData = new MutableLiveData<>();
|
}
|
return stateViewLiveData;
|
}
|
public LiveData<String> 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);
|
}
|
}
|