Android RXJava2 内存性能

Android RXJava2 memory performance

我创建了一个每 5 秒重复一次的 Observable(RxJava2 + Volley),
它有效,但是当我 Dump Java 堆(内存)时,我的 Model JAVA [= 有很多实例36=],每次 Observable 重复时它都会增加。
为什么 RX 创建我的模型的多个实例?我怎样才能只使用它的一个实例?

型号

public RequestFuture<String> getLiveRefreshFuture() {
        RequestFuture<String> future = RequestFuture.newFuture();
        VolleyStringRequest request = new VolleyStringRequest(Request.Method.POST
                , REFRESH_URL
                , future
                , future) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return getRefreshParams();
            }
        };

        VolleySingleton.getInstance().addToRequestQueue(request);
        return future;
    }    

Activity

    private final CompositeDisposable disposables = new CompositeDisposable();

final LiveRemoteModel model = DaggerLiveComponent.builder().build().getModel();

        Observable<LiveResponse> observable = Observable
                .interval(Constants.TOOLBAR_BADGES_REFRESH_DELAY, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .map(dummy -> model.getLiveRefreshFuture())
                .map(RequestFuture::get)
                .map(LiveResponse::new)
                .observeOn(AndroidSchedulers.mainThread());

        DisposableObserver<LiveResponse> disposableObserver =
                new DisposableObserver<LiveResponse>() {
                    @Override
                    public void onNext(@NonNull LiveResponse liveResponse) {
                        setToolbarBadges(liveResponse.getToolbarBadges());
                    }

                    public void onError(@NonNull Throwable e) {
                        Log.e("RX", "onError: ", e);
                    }

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

        disposables.add(observable.subscribeWith(disposableObserver));    

Why RX create several instance of my model? How can I use only ONE instance of it?

如果你仔细看,heapdump 中的对象是 LiveRemoteModel,这表明它是 LiveRemoteModel.

中的匿名 class

查看您的代码,这可能是每次调用 model.getLiveRefreshFuture() 时创建的 VolleyStringRequest 对象。 RX 管道中没有保留该对象,因此 Volley 中必须有某些东西保留它。