Skip to content

Commit de443db

Browse files
committed
优化mvp生命周期
1 parent cc97a24 commit de443db

File tree

21 files changed

+178
-106
lines changed

21 files changed

+178
-106
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
# 导入指南
115115
116116
``` groovy
117-
def quicklib = "4.4.0"
117+
def quicklib = "4.5.0"
118118
119119
// quicklib(Base)
120120
implementation "com.sdwfqin.quicklib:quicklib:$quicklib"

app/src/main/java/com/sdwfqin/quickseed/mvpretrofit/BaseResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.sdwfqin.quickseed.mvpretrofit;
22

3-
import com.sdwfqin.quicklib.mvp.BaseView;
3+
import com.sdwfqin.quicklib.mvp.IBaseView;
44

55
/**
66
* 描述:
@@ -24,7 +24,7 @@ public String toString() {
2424
'}';
2525
}
2626

27-
public boolean isOk(BaseView view) {
27+
public boolean isOk(IBaseView view) {
2828
if (statusCode == 1) {
2929
return true;
3030
} else {

app/src/main/java/com/sdwfqin/quickseed/mvpretrofit/NetworkError.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.sdwfqin.quickseed.mvpretrofit;
22

3-
import com.sdwfqin.quicklib.mvp.BaseView;
3+
import com.sdwfqin.quicklib.mvp.IBaseView;
44

55
/**
66
* 描述:网络统一异常处理
@@ -10,7 +10,7 @@
1010
*/
1111
public class NetworkError {
1212

13-
public static void error(BaseView view, Throwable throwable) {
13+
public static void error(IBaseView view, Throwable throwable) {
1414
RetrofitException.ResponeThrowable responeThrowable = RetrofitException.retrofitException(throwable);
1515
// 此处可以通过判断错误代码来实现根据不同的错误代码做出相应的反应
1616
switch (responeThrowable.code) {

app/src/main/java/com/sdwfqin/quickseed/mvpretrofit/RetrofitSubscriber.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.blankj.utilcode.util.LogUtils;
44
import com.blankj.utilcode.util.NetworkUtils;
5-
import com.sdwfqin.quicklib.mvp.BaseView;
5+
import com.sdwfqin.quicklib.mvp.IBaseView;
66

77
import java.lang.ref.WeakReference;
88

@@ -19,9 +19,9 @@
1919
*/
2020
public abstract class RetrofitSubscriber<T> implements Observer<T> {
2121

22-
private final WeakReference<BaseView> mView;
22+
private final WeakReference<IBaseView> mView;
2323

24-
public RetrofitSubscriber(BaseView view) {
24+
public RetrofitSubscriber(IBaseView view) {
2525
super();
2626
mView = new WeakReference<>(view);
2727
}

app/src/main/java/com/sdwfqin/quickseed/ui/mvp/WeatherMvpActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ protected void initEventAndData() {
3434

3535
@Override
3636
protected WeatherContract.WeatherPresenter createPresenter() {
37-
return new WeatherPresenterImpl();
37+
return new WeatherPresenterImpl(this);
3838
}
3939

4040
@Override

app/src/main/java/com/sdwfqin/quickseed/ui/mvp/WeatherPresenterImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.sdwfqin.quickseed.ui.mvp;
22

3-
import com.sdwfqin.quicklib.mvp.SamplePresenter;
3+
import androidx.lifecycle.LifecycleOwner;
4+
5+
import com.sdwfqin.quicklib.mvp.BasePresenter;
46
import com.sdwfqin.quicklib.utils.rx.RxSchedulersUtils;
57
import com.sdwfqin.quickseed.mvpretrofit.RetrofitClient;
68
import com.sdwfqin.quickseed.mvpretrofit.RetrofitSubscriber;
@@ -17,7 +19,11 @@
1719
* @author 张钦
1820
* @date 2020/4/16
1921
*/
20-
public class WeatherPresenterImpl extends SamplePresenter<WeatherContract.WeatherView> implements WeatherContract.WeatherPresenter {
22+
public class WeatherPresenterImpl extends BasePresenter<WeatherContract.WeatherView> implements WeatherContract.WeatherPresenter {
23+
24+
public WeatherPresenterImpl(LifecycleOwner owner) {
25+
super(owner);
26+
}
2127

2228
@Override
2329
public void loadData() {
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.sdwfqin.quickseed.ui.mvp.contract;
22

3-
import com.sdwfqin.quicklib.mvp.BasePresenter;
4-
import com.sdwfqin.quicklib.mvp.BaseView;
3+
import com.sdwfqin.quicklib.mvp.IBasePresenter;
4+
import com.sdwfqin.quicklib.mvp.IBaseView;
55
import com.sdwfqin.quickseed.ui.mvvm.WeatherBean;
66

77
/**
@@ -13,10 +13,10 @@
1313
*/
1414
public interface WeatherContract {
1515

16-
interface WeatherView extends BaseView {
16+
interface WeatherView extends IBaseView {
1717
void refreshView(WeatherBean weatherBean);
1818
}
19-
interface WeatherPresenter extends BasePresenter<WeatherView> {
19+
interface WeatherPresenter extends IBasePresenter<WeatherView> {
2020
void loadData();
2121
}
2222
}

config.gradle

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
ext {
22

3-
versionCode = 202007301
4-
versionName = "4.4.0"
3+
versionCode = 202008171
4+
versionName = "4.5.0"
55

66
qmui = "2.0.0-alpha10"
77
okhttp = "4.7.2"
88
retrofit = "2.9.0"
99
glide = "4.11.0"
1010
vlayout = "1.2.36"
1111
camerax_version = "1.0.0-beta07"
12-
smartrefresh = "2.0.0"
12+
smartrefresh = "2.0.1"
1313

1414
androidVersion = [
1515
compileSdkVersion: 29,
@@ -47,15 +47,16 @@ ext {
4747

4848
viewDependencies = [
4949
// qmui
50-
"qmui" : "com.qmuiteam:qmui:$qmui",
51-
"arch" : "com.qmuiteam:arch:$qmui",
50+
"qmui" : "com.qmuiteam:qmui:$qmui",
51+
"arch" : "com.qmuiteam:arch:$qmui",
5252
// brvah
53-
"brvah" : "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4",
53+
"brvah" : "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4",
5454
// smartrefresh
55-
"smartrefresh" : "com.scwang.smart:refresh-layout-kernel:$smartrefresh",
56-
"smartrefresh-classics": "com.scwang.smart:refresh-header-classics:$smartrefresh",
55+
"smartrefresh" : "com.scwang.smart:refresh-layout-kernel:$smartrefresh",
56+
"smartrefresh-classics" : "com.scwang.smart:refresh-header-classics:$smartrefresh",
57+
"smartrefresh-classics-footer": "com.scwang.smart:refresh-footer-classics:$smartrefresh",
5758
// pickerview
58-
"pickerview" : "com.contrarywind:Android-PickerView:4.1.9",
59+
"pickerview" : "com.contrarywind:Android-PickerView:4.1.9",
5960
]
6061

6162
imageDependencies = [
@@ -74,13 +75,13 @@ ext {
7475
utilsDependencies = [
7576
"permissionx": "com.permissionx.guolindev:permissionx:1.3.0",
7677
// utils
77-
"utilcodex" : "com.blankj:utilcodex:1.29.0",
78+
"utilcodex" : "com.blankj:utilcodex:1.29.0",
7879
// agentweb
79-
"agentweb" : "com.just.agentweb:agentweb:4.1.3",
80+
"agentweb" : "com.just.agentweb:agentweb:4.1.3",
8081
// arouter
81-
"arouter" : "com.alibaba:arouter-api:1.5.0",
82-
"gson" : "com.google.code.gson:gson:2.8.6",
83-
"zxing" : "com.google.zxing:core:3.4.0",
82+
"arouter" : "com.alibaba:arouter-api:1.5.0",
83+
"gson" : "com.google.code.gson:gson:2.8.6",
84+
"zxing" : "com.google.zxing:core:3.4.0",
8485
]
8586

8687
thirdDependencies = [

quicklib/src/main/java/com/sdwfqin/quicklib/base/BaseActivity.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,31 @@
1717
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
1818
import com.sdwfqin.quicklib.R;
1919
import com.sdwfqin.quicklib.dialog.PermissionCustomDialog;
20-
import com.sdwfqin.quicklib.mvp.BaseView;
20+
import com.sdwfqin.quicklib.mvp.IBaseView;
2121
import com.sdwfqin.quicklib.utils.AppManager;
2222
import com.sdwfqin.quicklib.utils.eventbus.Event;
2323
import com.sdwfqin.quicklib.utils.eventbus.EventBusUtil;
24+
import com.sdwfqin.quicklib.utils.rx.RxJavaLifecycleManager;
2425

2526
import org.greenrobot.eventbus.Subscribe;
2627
import org.greenrobot.eventbus.ThreadMode;
2728

28-
import io.reactivex.rxjava3.disposables.CompositeDisposable;
2929
import io.reactivex.rxjava3.disposables.Disposable;
3030

3131
/**
3232
* 描述:Activity基类
3333
*
3434
* @author 张钦
3535
*/
36-
public abstract class BaseActivity<V extends ViewBinding> extends QMUIActivity implements BaseView {
36+
public abstract class BaseActivity<V extends ViewBinding> extends QMUIActivity implements IBaseView {
3737

3838
protected Activity mContext;
3939
protected V mBinding;
4040
protected LinearLayoutCompat mQuickBaseView;
4141
/**
4242
* Rxjava 订阅管理
4343
*/
44-
protected CompositeDisposable mCompositeDisposable;
44+
protected RxJavaLifecycleManager mRxJavaLifecycleManager;
4545
/**
4646
* 顶部标题栏
4747
*/
@@ -59,6 +59,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5959
mTopBar = findViewById(R.id.quick_base_topbar);
6060
mContext = this;
6161
AppManager.addActivity(this);
62+
mRxJavaLifecycleManager = new RxJavaLifecycleManager(this);
6263
initPresenter();
6364
initViewModel();
6465
initEventAndData();
@@ -84,7 +85,6 @@ protected void onStop() {
8485

8586
@Override
8687
protected void onDestroy() {
87-
unSubscribe();
8888
removePresenter();
8989
AppManager.removeActivity(this);
9090
super.onDestroy();
@@ -212,21 +212,7 @@ public void startActivitySample(Class<?> cls) {
212212
*/
213213
@Override
214214
public void addSubscribe(Disposable subscription) {
215-
if (mCompositeDisposable == null) {
216-
mCompositeDisposable = new CompositeDisposable();
217-
}
218-
mCompositeDisposable.add(subscription);
219-
}
220-
221-
/**
222-
* RxJava 解除所有订阅者
223-
*/
224-
public void unSubscribe() {
225-
if (mCompositeDisposable != null) {
226-
mCompositeDisposable.dispose();
227-
mCompositeDisposable.clear();
228-
mCompositeDisposable = new CompositeDisposable();
229-
}
215+
mRxJavaLifecycleManager.addDisposable(subscription);
230216
}
231217

232218
// ==================== 权限管理 ====================
@@ -273,6 +259,10 @@ protected void initPresenter() {
273259

274260
}
275261

262+
/**
263+
* 改为Lifecycle管理
264+
*/
265+
@Deprecated
276266
protected void removePresenter() {
277267

278268
}

quicklib/src/main/java/com/sdwfqin/quicklib/base/BaseFragment.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414

1515
import com.blankj.utilcode.util.ToastUtils;
1616
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
17-
import com.sdwfqin.quicklib.mvp.BaseView;
17+
import com.sdwfqin.quicklib.mvp.IBaseView;
1818
import com.sdwfqin.quicklib.utils.eventbus.Event;
1919
import com.sdwfqin.quicklib.utils.eventbus.EventBusUtil;
20+
import com.sdwfqin.quicklib.utils.rx.RxJavaLifecycleManager;
2021

2122
import org.greenrobot.eventbus.Subscribe;
2223
import org.greenrobot.eventbus.ThreadMode;
2324

24-
import io.reactivex.rxjava3.disposables.CompositeDisposable;
2525
import io.reactivex.rxjava3.disposables.Disposable;
2626

2727
/**
@@ -30,7 +30,7 @@
3030
* @author 张钦
3131
* @date 2017/8/3
3232
*/
33-
public abstract class BaseFragment<V extends ViewBinding> extends Fragment implements BaseView {
33+
public abstract class BaseFragment<V extends ViewBinding> extends Fragment implements IBaseView {
3434

3535
protected V mBinding;
3636
protected BaseActivity mActivity;
@@ -53,7 +53,7 @@ public abstract class BaseFragment<V extends ViewBinding> extends Fragment imple
5353
@Deprecated
5454
protected boolean mIsLoad = false;
5555
private QMUITipDialog mQmuiTipDialog;
56-
protected CompositeDisposable mCompositeDisposable;
56+
protected RxJavaLifecycleManager mRxJavaLifecycleManager;
5757

5858
/**
5959
* Fragment的UI是否是可见
@@ -76,6 +76,7 @@ public void setUserVisibleHint(boolean isVisibleToUser) {
7676
public void onAttach(Context context) {
7777
mActivity = (BaseActivity) context;
7878
mContext = context;
79+
mRxJavaLifecycleManager = new RxJavaLifecycleManager(this);
7980
super.onAttach(context);
8081
}
8182

@@ -136,7 +137,6 @@ private void baseLazyLoad() {
136137
@Override
137138
public void onDestroyView() {
138139
mIsPrepared = false;
139-
unSubscribe();
140140
removePresenter();
141141
mBinding = null;
142142
super.onDestroyView();
@@ -256,21 +256,7 @@ public void startActivitySample(Class<?> cls) {
256256
*/
257257
@Override
258258
public void addSubscribe(Disposable subscription) {
259-
if (mCompositeDisposable == null) {
260-
mCompositeDisposable = new CompositeDisposable();
261-
}
262-
mCompositeDisposable.add(subscription);
263-
}
264-
265-
/**
266-
* RxJava 解除所有订阅者
267-
*/
268-
public void unSubscribe() {
269-
if (mCompositeDisposable != null) {
270-
mCompositeDisposable.dispose();
271-
mCompositeDisposable.clear();
272-
mCompositeDisposable = new CompositeDisposable();
273-
}
259+
mRxJavaLifecycleManager.addDisposable(subscription);
274260
}
275261

276262
protected void initViewModel() {
@@ -281,6 +267,10 @@ protected void initPresenter() {
281267

282268
}
283269

270+
/**
271+
* 改为Lifecycle管理
272+
*/
273+
@Deprecated
284274
protected void removePresenter() {
285275

286276
}

0 commit comments

Comments
 (0)