찾다

 >  Q&A  >  본문

android - 关于RxBus的一个疑问...

1 . 先上我写的一个方法:

public static Observable<RxEvent> sendBytesRx(ByteBuffer buffer) {
        writeThread.add(buffer);
        return RxBus.getDefault().toObserverable(RxEvent.class);
}

这是一个发送数据到服务器的一个函数。


2 . 然后我就调用:

@OnClick(R.id.button2)
    public void btn2(Button button) {
        BgService.sendBytesRx(CSAPIUtils._1_LogIn(xxx,xxx))
                .observeOn(Schedulers.newThread())
                .compose(this.bindUntilEvent(ActivityEvent.DESTROY))
                .subscribeOn(Schedulers.newThread())
                .subscribe(
                        rxEvent -> {
                            //解析数据
                            LogUtils.e(OpenLog,TAG,"1");
                        },throwable -> {
                            LogUtils.e(OpenLog,TAG,throwable.getMessage());
                        });
    }

3 . 发现有点不对,
当我多次点击这个Button,触发OnClick方法,发现,
第一次点击,返回数据,打印:1
第二次点击,返回数据,打印:1 1
...
好像是每次点击的时候,就订阅了这个RxBus的事件,但是
事件完成之后却没有去取消订阅...

请教各位大神!刚入Rx大门。

迷茫迷茫2772일 전337

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 18:03:22

    여러 번 구독하면 각 구독자가 메시지를 받게 됩니다.
    해결책: onCreate 중에 한 번만 구독하거나 메시지를 받은 후 현재 구독을 취소하세요.

    회신하다
    0
  • 阿神

    阿神2017-04-17 18:03:22

    스케줄러의 사양을 제외하면 코드의 두 번째 단락에는 큰 문제가 없어야 합니다. 주요 문제는 첫 번째 단락에 있습니다.

    으아악

    RxBus.getDefault().toObserverable(RxEvent.class) 이것이 문제입니다. 특정 구현 코드에 따라 다릅니다.

    p.s. 구독 시기와는 상관이 없습니다. 그렇다면 Rx 구독은 언제든지 가능합니다.

    회신하다
    0
  • 취소회신하다