栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;


public interface Disposable {
  
  void dispose();

  
  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代码



public class RxTimerUtil {

  private static Disposable mDisposable;

  
  public static void timer(long milliseconds,final IRxNext next) {
    Observable.timer(milliseconds, TimeUnit.MILLISECONDS)
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(new Observer() {
   @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();
   }
 });
  }


  
  public static void interval(long milliseconds,final IRxNext next){
    Observable.interval(milliseconds, TimeUnit.MILLISECONDS)
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(new Observer() {
   @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();
  }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/158331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号