全网整合营销服务商

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

免费咨询热线: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实现定时功能的示例代码  # 的是  # 好了  # 是在  # 我在  # 不需要  # 一是  # 要用  # 有兴趣  # 已是  # 重写  # 升级到  # 取而代之  # 每隔  # 第二步  # 讲到  # 做些  # 需要注意  # 中会  # 之于  # 大家多多 


相关文章: 如何在宝塔面板中创建新站点?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何配置支付宝与微信支付功能?  C#怎么创建控制台应用 C# Console App项目创建方法  高防服务器租用首荐平台,企业级优惠套餐快速部署  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  宝塔建站教程:一键部署配置流程与SEO优化实战指南  已有域名和空间如何快速搭建网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站主机选择指南:服务器配置与SEO优化实战技巧  如何快速生成可下载的建站源码工具?  代购小票制作网站有哪些,购物小票的简要说明?  Bpmn 2.0的XML文件怎么画流程图  建站org新手必看:2024最新搭建流程与模板选择技巧  如何通过宝塔面板实现本地网站访问?  5种Android数据存储方式汇总  如何在阿里云虚拟主机上快速搭建个人网站?  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  大连网站制作公司哪家好一点,大连买房网站哪个好?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何在Windows 2008云服务器安全搭建网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  山东网站制作公司有哪些,山东大源集团官网?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  如何通过FTP服务器快速搭建网站?  制作宣传网站的软件,小红书可以宣传网站吗?  *服务器网站为何频现安全漏洞?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  建站VPS能否同时实现高效与安全翻墙?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何规划企业建站流程的关键步骤?  太平洋网站制作公司,网络用语太平洋是什么意思?  企业微网站怎么做,公司网站和公众号有什么区别?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何配置WinSCP新建站点的密钥验证步骤?  如何快速生成专业多端适配建站电话?  营销式网站制作方案,销售哪个网站招聘效果最好?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  制作电商网页,电商供应链怎么做?  如何自定义建站之星网站的导航菜单样式?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  ,网站推广常用方法?  网站制作壁纸教程视频,电脑壁纸网站? 

您的项目需求

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