Android Retrofit生命周期的管理

2018-12-14  本文已影响0人  粥小新

Retrofit应该是目前Android上最流行的网络框架之一了。那么怎么管理他的生命周期呢,总不能在每个引用的Activity或Fragment生命周期中都去手动cancel网络请求吧。接下来介绍几种实用的方法。

1.借助rxjava,CompositeSubscription类。

CompositeSubscription是Subscriptions的集合类,用于取消订阅操作。可集成在BaseActivity/BaseFragment用于统一管理。

首先将接口封装为Observable,用于添加进compositeSubscription

  @GET(Config.CITYS)
  Observable<HttpDataListResponseBean<CityEntity>> citys();

其次在BaseActivity/BaseFragment统一管理composieSubcription

  public abstract class BaseActivity extends Activity{
        private CompositeSubscription mCompositeSubscription;

        public CompositeSubscription getCompositeSubscription() {
            if (this.mCompositeSubscription == null) {
                this.mCompositeSubscription = new CompositeSubscription();
            }

            return this.mCompositeSubscription;
        }

        public void addSubscription(Subscription s) {
            if (this.mCompositeSubscription == null) {
                this.mCompositeSubscription = new CompositeSubscription();
            }

            this.mCompositeSubscription.add(s);
        }

         @Override
        public void onDestroy() {
            super.onDestroy();
              //在销毁时统一取消
            if (this.mCompositeSubscription != null) {
                this.mCompositeSubscription.unsubscribe();
            }

        }

    }

这样只要在请求的时候调用addSubscription()方法即可。

2.还是借助强大的rxjava。利用rxlifecycle框架管理生命周期。
  首先添加引用
  
  compile 'com.trello:rxlifecycle-components:0.6.1'

让你的activity继承RxActivity,RxAppCompatActivity,RxFragmentActivity
让你的fragment继承RxFragment,RxDialogFragment

RetrofitClient.getInstance().get().citys()
        .subscribeOn( Schedulers.io())
        .compose(this.<Long>bindToLifecycle())   //这个订阅关系跟Activity绑定,Observable 和activity生命周期同步
        .observeOn( AndroidSchedulers.mainThread())
        .subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                System.out.println("lifecycle--" + aLong);
            }
        });
   }

当Activity结束掉以后,Observable停止发送数据,订阅关系解除。
这里bindToLifecycle默认是对应Activity的onDestroy事件的,我们也可以换成 bindUntilEvent()对应其他生命周期。
bindUntilEvent( ActivityEvent event),这里ActivityEvent是枚举类,包含activity全部生命周期

public enum ActivityEvent {
    CREATE,
    START,
    RESUME,
    PAUSE,
    STOP,
    DESTROY
}

如果是Fragment里面调用,则可以将ActivityEvent换为FragmentEvent,用法一样

3.利用RetrofitLifecycle

如果不想借助Rxjava,那可以使用网上的开源框架RetrofitLifecycle
https://github.com/luckyandyzhang/RetrofitLifecycle

上一篇下一篇

猜你喜欢

热点阅读