How to stop and resume Observable.interval emiting ticks

后端 未结 7 2035
野性不改
野性不改 2020-12-13 06:32

This will emit a tick every 5 seconds.

Observable.interval(5, TimeUnit.SECONDS, Schedulers.io())
            .subscribe(tick -> Log.d(TAG, "tick = &qu         


        
7条回答
  •  不思量自难忘°
    2020-12-13 07:26

    Here's one possible solution:

    class TickHandler {
    
        private AtomicLong lastTick = new AtomicLong(0L);
        private Subscription subscription;
    
        void resume() {
            System.out.println("resumed");
            subscription = Observable.interval(5, TimeUnit.SECONDS, Schedulers.io())
                                     .map(tick -> lastTick.getAndIncrement())
                                     .subscribe(tick -> System.out.println("tick = " + tick));
        }
    
        void stop() {
            if (subscription != null && !subscription.isUnsubscribed()) {
                System.out.println("stopped");
                subscription.unsubscribe();
            }
        }
    }
    

提交回复
热议问题