【问题标题】:RxJava Observable problemsRxJava 可观察问题
【发布时间】:2017-05-05 17:52:43
【问题描述】:

在android 6.0.1 Samsung s6 edge+上测试

当设备屏幕脱机并从调试中拔出时,可观察对象只是停止发射项目。如果设备打开,则开始发射对象。 另一个问题是,在停止接收物品之前,我会随机收到 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();
                        }
                    });

__________________________________编辑__________________________________

做另一篇文章以提供更多详细信息。我不能给你完整的日志,但我会尝试更好地解释我所做的工作以确保问题是可观察到的。

关注

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

我用 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");
        }
    };
}

正在发生的事情的日志

【问题讨论】:

  • 您的订阅者是做什么的?你在哪里取消订阅/再次订阅这个 observable? '停止接收物品之前'是什么意思?
  • 抱歉,我没有提供所有信息。我的订阅者向远程服务器发送 ping,让服务器知道设备处于活动状态。我的意思是在服务器上“接收物品”
  • Observable 是否没有发出项目或服务器没有收到 ping?重复调用也是如此,是 Observable 发出重复项还是服务器收到重复项?
  • 这是可观察到的问题。在我看到观察者停止被调用后让电话断开一段时间并记录日志..但是当我唤醒设备时,多个呼叫已完成,存储在正在处理的队列中
  • 如果这是 Observable 问题,请提供更多详细信息,日志,您在订阅中究竟是如何到达服务器的,您在哪里取消订阅 Observable

标签: android rx-java observable rx-android


【解决方案1】:

当设备屏幕脱机并从调试中拔出时,可观察对象只是停止发射项目。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多