android - 关于Rxjava的tack操作符?

查看:124
本文介绍了android - 关于Rxjava的tack操作符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

tack操作符,取出N个结果数,但我发现其还有另外一个:

.take(1 * 1000, TimeUnit.SECONDS, new Scheduler() {
                            @Override
                            public Worker createWorker() {
                                Worker wo = new Worker() {
                                    @Override
                                    public Subscription schedule(Action0 action0) {
                                        Log.e("1","action01");
                                        try {
                                            Thread.sleep(2232);
                                        } catch (InterruptedException e) {
                                            e.printStackTrace();
                                        }
                                        Log.e("1","action02");
                                        return null;
                                    }

                                    @Override
                                    public Subscription schedule(Action0 action0, long l, TimeUnit timeUnit) {
                                        Log.e("2",timeUnit.name());
                                        Log.e("2",String.valueOf(l));
                                        Log.e("2","action0");
                                        return null;
                                    }

                                    @Override
                                    public void unsubscribe() {
                                        Log.e("3","---");
                                    }

                                    @Override
                                    public boolean isUnsubscribed() {
                                        Log.e("4","---");
                                        return false;
                                    }
                                };
                                return wo;
                            }
                        })

这段代码,
在public Subscription schedule(Action0 action0)中我线程休眠了2232毫秒,
结果打印了:

06-19 11:41:37.771 7239-7239/com.example.kid.test_sql E/4: ---
06-19 11:41:37.773 7239-7239/com.example.kid.test_sql E/2: SECONDS
06-19 11:41:37.773 7239-7239/com.example.kid.test_sql E/2: 1000
06-19 11:41:37.773 7239-7239/com.example.kid.test_sql E/2: action0
06-19 11:41:37.836 7239-7583/com.example.kid.test_sql E/结果:: 1
06-19 11:41:37.837 7239-7583/com.example.kid.test_sql E/结果:: 2
06-19 11:41:37.837 7239-7583/com.example.kid.test_sql E/结果:: 3
06-19 11:41:37.837 7239-7583/com.example.kid.test_sql E/3: ---

结果是我的观察者最后打印的。
大家能帮我解释一下吗?网上好像没有这个的解释。

解决方案

take(long,TimeUnit,Scheduler):获取发射的数据序列中,从头部开始某个时间段内的数据。
long : 是时间长度
TimeUnit : 是时间单位
scheduler : take操作运行的调度器,RxJava内置多个调度器, 这些调度器已经满足日常的使用,直接拿过来用。

举个例子吧,我要在工作线程中拿到前5秒发射的数据:

Observable.from(xxx)
          .take(5, TimeUnit.SECONDS, Schedulers.newThread())
          .subscribe(new Subscriber<Object>) {
              
              ...
              
          } 

这篇关于android - 关于Rxjava的tack操作符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆