Rxjava1.x实现定时器

本文介绍如何使用RxJava 1.x实现Android中的定时器功能,包括一次性延时任务及周期性任务,并提供代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Android中实现定时器的方法有很多,大致有以下几种:


1.Thread +handler
2.handler的postdelay
3.timer
4.AlarmManager


关于 AlarmManager 的使用,大家可以看看我的另一篇文章:


寒炽-----AlarmManager为定时而生的绝杀技能:http://blog.youkuaiyun.com/burn_yourself/article/details/52574131


那么今天我们就来讲讲 RxJava1.x 是怎么优雅的实现定时器相关功能的,本篇文章参考了以下链接,有兴趣的同学可以去看看,
里面涉及到RxJava1.x的大量总结,还是能让人获益匪浅的。链接如下:


http://www.jianshu.com/p/6917510b0e4c


在此以做感谢。好了,那么今天就来讲讲 RxJava 是怎么实现定时器功能的。


首先,引入依赖库是必须的:
    //rxjava
    compile 'io.reactivex:rxjava:1.2.7'//rx对Android的支持
    compile 'io.reactivex:rxandroid:1.2.1'//rxjava

然后,看代码的实现。Speaking is so cheap,show me the code!


package com.test.util;


import java.util.concurrent.TimeUnit;


import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;


/**
 * Created by Admin on 2017/5/17.
 *
 * Rxjava定时器
 * //rxjava
 * compile 'io.reactivex:rxjava:1.2.7'//rx对Android的支持
 * compile 'io.reactivex:rxandroid:1.2.1'//rxjava
 */
public class RxTimerUtil {


    private static Subscription mSubscription;


    /** milliseconds毫秒后执行next操作
     *
     * @param milliseconds
     * @param next
     */
    public static void timer(long milliseconds,final IRxNext next) {
        mSubscription = Observable.timer(milliseconds, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long number) {
                        if(next!=null){
                            next.doNext(number);
                        }
                        //取消订阅
                        cancel();
                    }
                });
    }


    /** 每隔milliseconds毫秒后执行next操作
     *
     * @param milliseconds
     * @param next
     */
    public static void interval(long milliseconds,final IRxNext next){
        mSubscription=Observable.interval(milliseconds, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long number) {
                        if(next!=null){
                            next.doNext(number);
                        }
                    }
                });
    }


    /**
     * 取消订阅
     */
    public static void cancel(){
        if(mSubscription!=null&&!mSubscription.isUnsubscribed()){
            mSubscription.unsubscribe();
        }
    }


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


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


    @Override
    protected void onDestroy(){
        RxTimerUtil.cancel();
        LogUtil.e("====cancel====="+ DateUtil.getNowTime());
        super.onDestroy();
    }

OK。今天的讲解就到这里,谢谢诶!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值