全网整合营销服务商

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

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


相关文章: 设计网站制作公司有哪些,制作网页教程?  建站之星安装失败:服务器环境不兼容?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  实例解析Array和String方法  如何制作网站标识牌,动态网站如何制作(教程)?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何在七牛云存储上搭建网站并设置自定义域名?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何快速搭建个人网站并优化SEO?  如何快速搭建响应式可视化网站?  如何在阿里云部署织梦网站?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  ,如何利用word制作宣传手册?  如何基于PHP生成高效IDC网络公司建站源码?  如何获取开源自助建站系统免费下载链接?  再谈Python中的字符串与字符编码(推荐)  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何快速搭建高效服务器建站系统?  建站之家VIP精选网站模板与SEO优化教程整合指南  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何快速搭建虚拟主机网站?新手必看指南  javascript中的try catch异常捕获机制用法分析  ,怎么在广州志愿者网站注册?  如何通过.red域名打造高辨识度品牌网站?  如何用美橙互联一键搭建多站合一网站?  建站之星多图banner生成与模板自定义指南  建站之星图片链接生成指南:自助建站与智能设计教程  高性价比服务器租赁——企业级配置与24小时运维服务  制作电商网页,电商供应链怎么做?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何选择CMS系统实现快速建站与SEO优化?  如何通过云梦建站系统实现SEO快速优化?  如何在万网自助建站中设置域名及备案?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何制作算命网站,怎么注册算命网站?  如何通过VPS搭建网站快速盈利?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  建站之星导航配置指南:自助建站与SEO优化全解析  在线教育网站制作平台,山西立德教育官网?  内部网站制作流程,如何建立公司内部网站?  制作农业网站的软件,比较好的农业网站推荐一下?  利用JavaScript实现拖拽改变元素大小  济南网站建设制作公司,室内设计网站一般都有哪些功能?  宁波自助建站系统如何快速打造专业企业网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  宝塔建站教程:一键部署配置流程与SEO优化实战指南  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧 

您的项目需求

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