android搭建网络框架,Android 搭建MVP+Retrofit+RxJava网络请求框架(三)

上一篇中主要是将mvp+rxjava+retrofit进行了结合,本篇主要是对mvp框架的优化;建议先去看上一篇:Android 搭建MVP+Retrofit+RxJava网络请求框架(二)

针对view销毁时候产生的内存泄漏,对presenter持有view的引用进行优化:

public class BasePresenter {

protected V mView;

protected Context context;

protected ApiService mApiService;

private CompositeDisposable mCompositeDisposable;

//使用弱引用

private Reference mReference = null;

public BasePresenter(V v) {

this.mView = v;

initContext();

}

private void initContext() {

if (mView instanceof Fragment) {

context = ((Fragment) mView).getActivity();

} else {

context = (Context) mView;

}

}

//关联view

public void attachView(V mvpView) {

mReference = new WeakReference(mvpView);

mApiService = RetrofitHelper.getInstance().getServer();

}

//判断是否关联

public boolean isAttach() {

return null != mReference && null != mReference.get();

}

//接触关联

public void detachView() {

if (null != mReference) {

mReference.clear();

mReference = null;

}

onUnsubscribe();

}

//RXjava取消注册,以避免内存泄露

public void onUnsubscribe() {

if (mCompositeDisposable != null && mCompositeDisposable.isDisposed()) {

mCompositeDisposable.clear();

}

}

public void addSubscription(Observable observable, DisposableObserver subscriber) {

if (mCompositeDisposable == null) {

mCompositeDisposable = new CompositeDisposable();

}

observable

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribeWith(subscriber);

mCompositeDisposable.add(subscriber);

}

}

在view进行销毁时候,接触关联,并且使用弱引用,可以优先被gc回收;

抽出一个MvpActivity 来简化项目,让所有使用mvp结构的avtivity继承这个类,在oncreate方法中关联view,在销毁的时候进行接触关联;

public abstract class MvpActivity

extends BaseActivity implements BaseView{

protected P mvpPresenter;

@Override

protected void onCreate(Bundle savedInstanceState) {

mvpPresenter = createPresenter();

super.onCreate(savedInstanceState);

mvpPresenter.attachView(this);

}

protected abstract P createPresenter();

@Override

protected void onDestroy() {

super.onDestroy();

if (mvpPresenter != null) {

mvpPresenter.detachView();

}

}

public void showLoading() {

showProgressDialog();

}

public void hideLoading() {

dismissProgressDialog();

}

}

3.在mainActivity中继承MvpActivity

public class MainActivity extends MvpActivity implements BookInfoContract.IView {

@BindView(R.id.text)

TextView text;

@BindView(R.id.button)

Button button;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bindClick();

}

@Override

protected BookPresenter createPresenter() {

return new BookPresenter(this);

}

private void bindClick() {

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

//开始请求

mvpPresenter.getMsg("人间失格", null, 0, 1);

// LogUtil.e("mvpPresenter","mvpPresenter执行了");

}

});

}

@Override

public void showError(String msg) {

Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();

}

@Override

public void showResult(String msg) {

text.setText(msg);

}

}

由于使用了retrofit+rxjava进行获取,暂时并未使用model,而是直接通过apiService进行获取Observable 后进行数据请求和回调处理;

github地址:https://github.com/cruiseliang/MvpSample

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值