美文网首页安卓开发安卓开发
利用RxJava实现超级简单的定时器(RxTimer)

利用RxJava实现超级简单的定时器(RxTimer)

作者: 蓝不蓝编程 | 来源:发表于2018-10-12 08:41 被阅读33次

背景:

在项目中经常会有需要做定时任务的地方,以前一般采用Timer或者ScheduledExecutorService

解决方案:

1)项目中引入依赖:

    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.2'

2)增加如下工具类:

package com.cxyzy.rxtimer;

import android.support.annotation.NonNull;

import java.util.concurrent.TimeUnit;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;

public class RxTimer {

    private Disposable mDisposable;

    /**
     * milliseconds毫秒后执行指定动作
     *
     * @param milliSeconds
     * @param rxAction
     */
    public void timer(long milliSeconds, final RxAction rxAction) {
        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 (rxAction != null) {
                            rxAction.action(number);
                        }
                    }

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

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

    /**
     * 每隔milliseconds毫秒后执行指定动作
     *
     * @param milliSeconds
     * @param rxAction
     */
    public void interval(long milliSeconds, final RxAction rxAction) {
        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 (rxAction != null) {
                            rxAction.action(number);
                        }
                    }

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

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    /**
     * 取消订阅
     */
    public void cancel() {
        if (mDisposable != null && !mDisposable.isDisposed()) {
            mDisposable.dispose();
        }
    }

    public interface RxAction {
        /**
         * 让调用者指定指定动作
         *
         * @param number
         */
        void action(long number);
    }
}

调用样例:

RxTimer rxTimer = new RxTimer();
rxTimer.timer(1000, number -> Toast.makeText(MainActivity.this, "延迟1秒显示的toast", Toast.LENGTH_SHORT).show());

如果是调用的interval方法,需要在activity的onDestroy方法中调用cancel,类似如下:

@Override
protected void onDestroy(){
    rxTimer.cancel();
    super.onDestroy();
}

附录:

1. 源代码及样例工程(含apk及屏幕截图):https://gitee.com/cxyzy1/RxTimer

安卓开发技术分享: https://www.jianshu.com/p/442339952f26

相关文章

  • 利用RxJava实现超级简单的定时器(RxTimer)

    背景: 在项目中经常会有需要做定时任务的地方,以前一般采用Timer或者ScheduledExecutorServ...

  • RxJava2.x实现定时器

    在之前我已经写过一篇关于Rxjava1.x的定时器功能,想了解的同学可以移步Rxjava1.x实现定时器 前言 由...

  • RxJava基础

    主要记录RxJava的知识点,不涉及原理和细节 简介 利用RxJava实现函数响应式编程 RxJava = 被观察...

  • 使用RxJava实现定时器功能

    使用RxJava实现定时器功能可以通过两种方式来实现,具体实现如下: 一、使用timer 操作符 二、使用使用in...

  • 【前端案例】10 - 案例:5秒后关闭 ad

    该案例利用的就是 JavaScript 的定时器 setTimeout();实现。

  • throttle && debounce

    1、throttle简单时间戳实现 2、throttle简单定时器实现 3、throttle完整实现 4、debo...

  • RxBus:用RxJava实现EventBus

    项目引入了RxJava之后,想减少包的依赖,决定使用RxJava实现EventBus。先来一个简单的实现: 发送事...

  • swift 定时器

    定时器的两种简单实现方式: 1.timer 2.GCD 上面两种方法以及实现简单的定时器,但是还有一个隐藏的问题,...

  • Rxjava

    1、Rxjava是什么:简单来说,它就是一个实现异步操作的库; 2、Rxjava的优势:结构简单,程序逻辑清晰,编...

  • js定时器的使用

    l 定时器 n 定时器分类以及基本用法 1、定时器简介 js定时器是利用js实现定时的一种方法,在网站上有很多用途...

网友评论

    本文标题:利用RxJava实现超级简单的定时器(RxTimer)

    本文链接:https://www.haomeiwen.com/subject/jxrwaftx.html