美文网首页
Android Retrofit生命周期的管理

Android Retrofit生命周期的管理

作者: 粥小新 | 来源:发表于2018-12-14 16:47 被阅读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

    相关文章

      网友评论

          本文标题:Android Retrofit生命周期的管理

          本文链接:https://www.haomeiwen.com/subject/kbpghqtx.html