广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州OkHttps如何实现生命周期绑定?_北大青鸟IT学校

作者:邓华发布时间:2021-06-14分类:Java技术浏览:830


导读:OkHttps如何实现生命周期绑定?这是大家在学习Java的过程都会遇到的问题,那么下面我们一起来看看惠州北大青鸟学术部老师是怎么解答的。

OkHttps如何实现生命周期绑定?这是大家在学习Java的过程都会遇到的问题,那么下面我们一起来看看惠州北大青鸟学术部老师是怎么解答的。

  由于 OkHttps 并不依赖于 Android,所以它并没有提供关于生命周期绑定的直接实现,但它的一些扩展机制让我们很容易就可以实现这个需求。在开始之前,我们首先要理解何为生命周期绑定:

所谓的生命周期绑定:即是让 HTTP 任务感知其所属的 Activity 或 Fragment 的生命周期,当 Activity 或 Fragment 将被销毁时,框架应自动的把由它们发起的但尚未完成的 HTTP 任务全部取消,以免导致程序出错!

  现在我们需要对HTTP实例进行配置,配置后的HTTP实例具有生命周期绑定的功能,在Activity或Fragment里,它的使用效果如下:

  1. // 在 Activity 或 Fragment 内发起请求

  2. http.async("http://www.baidu.com")

  3.         .bind(getLifecycle())   // 绑定生命周期

  4.         .setOnResponse((HttpResult result) -> {

  5.             Log.i("FirstFragment", "收到请求:" + result.toString());

  6.         })

  7.         .get();

  上述代码中的getLifecycle()是Activity或Fragment自带的方法,而bind()是HttpTask的现有方法。在配置好HTTP实例后,上述代码发起的请求便可以感知Activity或Fragment的生命周期。

  那HTTP实例到底该如何配置呢?

第一步:配置预处理器

  1. HTTP http = HTTP.builder()

  2.         ... // 省略其它配置项

  3.         .addPreprocessor((Preprocessor.PreChain chain) -> {

  4.             HttpTask<?> task = chain.getTask();

  5.             Object bound = task.getBound();

  6.             // 判断 task 是否绑定了 Lifecycle 对象

  7.             if (bound instanceof Lifecycle) {

  8.                 // 重新绑定一个 生命周期监视器(LCObserver)对象,它的定义见下一步

  9.                 task.bind(new LCObserver(task, (Lifecycle) bound));

  10.             }

  11.             chain.proceed();

  12.         })

  13.         ... // 省略其它配置项

  14.         .build();

第二步:定义生命周期监视器

  1. public class LCObserver implements LifecycleObserver {



  2.     HttpTask<?> task;

  3.     Lifecycle lifecycle;



  4.     LCObserver(HttpTask<?> task, Lifecycle lifecycle) {

  5.         this.task = task;

  6.         this.lifecycle = lifecycle;

  7.         lifecycle.addObserver(this);

  8.     }



  9.     @OnLifecycleEvent(Lifecycle.Event.ON_STOP)

  10.     public void onStop() {

  11.         task.cancel();  // 在 ON_STOP 事件中,取消对应的 HTTP 任务

  12.     }



  13.     public void unbind() {

  14.         // 在请求完成之后移除监视器

  15.         lifecycle.removeObserver(this);

  16.     }



  17. }

第三步:配置全局回调监听

  以上两步其实已经实现了生命周期绑定的功能,但是在请求完成之后,我们需要在lifecycle中移除LCObserver对象:

  1. HTTP http = HTTP.builder()

  2.         ... // 省略其它配置项

  3.         .completeListener((HttpTask<?> task, HttpResult.State state) -> {

  4.             Object bound = task.getBound();

  5.             // 判断 task 是否绑定了生命周期监视器(LCObserver)对象

  6.             if (bound instanceof LCObserver) {

  7.                 // 解绑监视器

  8.                 ((LCObserver) bound).unbind();

  9.             }

  10.             return true;

  11.         })

  12.         ... // 省略其它配置项

  13.         .build();

以上三步便在Android中实现了生命周期与HTTP请求绑定的功能

想知道更多关于Java的资讯,联系在线客服,或者来惠州北大青鸟新方舟校区了解了解。

java5.png

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表