RxJava可观察到的问题

时间:2017-05-03 15:46:28

标签: android rx-java observable rx-android

测试Android 6.0.1三星s6边缘+

当设备屏幕脱机并从调试中拔出时,observable只会停止发出项目。如果打开设备,则会开始发送对象。 另一个问题是在停止恢复项目之前随机发生,我按相同项目的顺序获得2/3重复呼叫

Observable.interval(4000,
            30000, TimeUnit.MILLISECONDS)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(ErrorResponse.handleError()).subscribe(new Action1() {
                        @Override
                        public void call(Object o) {
                            statusSender.doNetworkCallAndGetStringResult();
                        }
                    });

__________________________________ EDIT __________________________________

另外发布帖子以提供更多详情。我不能给你完整的日志,但我会尝试更好地解释我所做的事情,以确保问题是可观察的。

以下

flexbox-layout

我尝试使用Rxjava2

进行不同的实现
isposables.add(statusSender.getObservable(certificate)
                    .subscribeOn(io.reactivex.schedulers.Schedulers.io())
                    .observeOn(io.reactivex.android.schedulers.AndroidSchedulers.mainThread())
                    .subscribeWith(getObserver()))

getObservable方法

return io.reactivex.Observable.interval(INITIAL_DELAY,Utilities.getInstance().getHeartbeatFrequency(),TimeUnit.MILLISECONDS);

getObserver方法是asExample,区别在于我在onNext

中进行网络调用
private DisposableObserver<Long> getObserver() {
    return new DisposableObserver<Long>() {

        @Override
        public void onNext(Long value) {
            Log.d(TAG, " onNext : value : " + value);
            statusSender.doNetworkCallAndGetStringResult();
        }

        @Override
        public void onError(Throwable e) {
            Log.d(TAG, " onError : " + e.getMessage());
        }

        @Override
        public void onComplete() {
            Log.d(TAG, " onComplete");
        }
    };
}

记录正在发生的事情

https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java

1 个答案:

答案 0 :(得分:0)

  

当设备屏幕脱机并从调试中拔出时,observable只会停止发出项目。

这是Android上的预期行为:设备将暂停您的活动并切换到低功耗模式以节省电量。如果您需要在后台执行某些操作,您需要创建一个服务,通过特定于Android的计时器请求唤醒,并要求特殊权限以使设备保持在您的清单中(我想,它已经有一段时间了)