全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

RxJava2.x实现定时器的实例代码

前言

由于现在网络层已经升级到RxJava2.x相关的了,所以需要做些调整。虽然RxJava1.x和RxJava2.x同属RxJava系列,但由于RxJava2.x部分代码的重写,导致RxJava2.x与RxJava1.x已是两个不同的版本,RxJava2.x在性能上更优,尤其在背压支持上。当然,此篇重点不在Rx版本上的区别,有兴趣的同学可以自行研究。当然,2.x之于1.x的区别之一是2.x中已经没有 Subscription mSubscription, Observable.create()等方法也不再返回 Subscription对像,取而代之的是在 new Observer()方法中会多返回一个
onSubscribe(@NonNull Disposable disposable) 方法,而Disposable disposable即时我们取消订阅要用到的对象,其方法有:

package io.reactivex.disposables;

/**
 * Represents a disposable resource.
 */
public interface Disposable {
  /**
   * Dispose the resource, the operation should be idempotent.
   */
  void dispose();

  /**
   * Returns true if this resource has been disposed.
   * @return true if this resource has been disposed
   */
  boolean isDisposed();
}

dispose():取消订阅

isDisposed():判断订阅是否已经取消

ok,有了这些铺垫之后,我们进入正题。

第一步,导入RxJava2.x依赖包

  //rxjava2.x
  compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
  compile 'io.reactivex.rxjava2:rxjava:2.1.0'

第二步,直接上定时器类RxTimerUtil代码

/**
 * Instruction:Rxjava2.x实现定时器
 * <p>
 * Author:pei
 * Date: 2017/6/29
 * Description:
 */

public class RxTimerUtil {

  private static Disposable mDisposable;

  /** milliseconds毫秒后执行next操作
   *
   * @param milliseconds
   * @param next
   */
  public static void timer(long milliseconds,final IRxNext next) {
    Observable.timer(milliseconds, TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<Long>() {
          @Override
          public void onSubscribe(@NonNull Disposable disposable) {
            mDisposable=disposable;
          }

          @Override
          public void onNext(@NonNull Long number) {
            if(next!=null){
              next.doNext(number);
            }
          }

          @Override
          public void onError(@NonNull Throwable e) {
            //取消订阅
            cancel();
          }

          @Override
          public void onComplete() {
            //取消订阅
            cancel();
          }
        });
  }


  /** 每隔milliseconds毫秒后执行next操作
   *
   * @param milliseconds
   * @param next
   */
  public static void interval(long milliseconds,final IRxNext next){
    Observable.interval(milliseconds, TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<Long>() {
          @Override
          public void onSubscribe(@NonNull Disposable disposable) {
            mDisposable=disposable;
          }

          @Override
          public void onNext(@NonNull Long number) {
            if(next!=null){
              next.doNext(number);
            }
          }

          @Override
          public void onError(@NonNull Throwable e) {

          }

          @Override
          public void onComplete() {

          }
        });
  }


  /**
   * 取消订阅
   */
  public static void cancel(){
    if(mDisposable!=null&&!mDisposable.isDisposed()){
      mDisposable.dispose();
      LogUtil.e("====定时器取消======");
    }
  }

  public interface IRxNext{
    void doNext(long number);
  }
}

需要注意的是,若你使用的是延时执行一次的话,在调用 timer 后,不需要 cancel,因为我在代码中已经处理好了,
如果是调用的重复执行的方法,你需要在activity的ondestroy方法中取消订阅,类似如下:

@Override
  protected void onDestroy(){
    //取消定时器
    RxTimerUtil.cancel();
    LogUtil.e("====cancel====="+ DateUtil.getNowTime());
    super.onDestroy();
  }

多么简单粗暴,好了,今天就讲到这里吧,希望对大家的学习有所帮助,也希望大家多多支持。


# RxJava实现定时器  # RxJava  # 定时器  # java当中的定时器的4种使用方式  # Java定时任务的三种实现方法  # Java中指定时区的3种方法  # Java定时器Timer使用方法详解  # Java定时任务的三种实现方式  # java定时调度器(Quartz)使用实例  # Java 定时器(Timer  # TimerTask)详解及实例代码  # java定时任务Timer和TimerTask使用详解  # Java实现定时任务最简单的3种方法  # Java中的定时器Timer详解  # java基于QuartzJobBean实现定时功能的示例代码  # 的是  # 好了  # 是在  # 我在  # 不需要  # 一是  # 要用  # 有兴趣  # 已是  # 重写  # 升级到  # 取而代之  # 每隔  # 第二步  # 讲到  # 做些  # 需要注意  # 中会  # 之于  # 大家多多 


相关文章: h5网站制作工具有哪些,h5页面制作工具有哪些?  建设网站制作价格,怎样建立自己的公司网站?  平台云上自助建站如何快速打造专业网站?  建站之星导航如何优化提升用户体验?  如何选择建站程序?包含哪些必备功能与类型?  制作网站怎么制作,*游戏网站怎么搭建?  如何在阿里云通过域名搭建网站?  活动邀请函制作网站有哪些,活动邀请函文案?  如何在建站主机中优化服务器配置?  制作网站公司那家好,网络公司是做什么的?  如何在云服务器上快速搭建个人网站?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何通过云梦建站系统实现SEO快速优化?  制作表格网站有哪些,线上表格怎么弄?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  Python如何创建带属性的XML节点  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  如何通过可视化优化提升建站效果?  如何通过山东自助建站平台快速注册域名?  PHP正则匹配日期和时间(时间戳转换)的实例代码  大连 网站制作,大连天途有线官网?  网站制作报价单模板图片,小松挖机官方网站报价?  济南网站制作的价格,历城一职专官方网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  小型网站建站如何选择虚拟主机?  教程网站设计制作软件,怎么创建自己的一个网站?  如何在西部数码注册域名并快速搭建网站?  详解jQuery停止动画——stop()方法的使用  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何用低价快速搭建高质量网站?  如何通过服务器快速搭建网站?完整步骤解析  建站主机选择指南:服务器配置与SEO优化实战技巧  清除minerd进程的简单方法  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  网站制作费用多少钱,一个网站的运营,需要哪些费用?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  微信h5制作网站有哪些,免费微信H5页面制作工具?  个人网站制作流程图片大全,个人网站如何注销?  如何通过wdcp面板快速创建网站?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何在宝塔面板中修改默认建站目录?  利用JavaScript实现拖拽改变元素大小  高防服务器如何保障网站安全无虞?  全景视频制作网站有哪些,全景图怎么做成网页?  如何通过西部建站助手安装IIS服务器?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  简单实现Android文件上传 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。