は、私は各5秒間繰り返し観察可能(RxJava2 +ボレー)を作成し、
は、それは動作しますが、私は Javaヒープ(メモリ)をダンプとき、私のモデル JAVAクラスの多くのインスタンスがありますObservableが繰り返されるたびに増加します。
RXが私のモデルのいくつかのインスタンスを作成するのはなぜですか?どのようにして1つのインスタンスだけを使用できますか?アンドロイドRXJava2はメモリ性能
モデル
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;
}
活性
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));
誰かにとって役に立つかもしれない 私はすべてのローカル変数を** WeakReference **に変換し、** LeakCanary **ライブラリをインストールしてメモリリークを監視します。 少なくとも今はすべてOKです。そして、* LiveRemoteModel *のすべてのインスタンスは、GCイベント – saeid