-1
내가 각 5 초 동안 반복 피 감시 (RxJava2 + 발리)을 생성,
그것은 작동하지만 내가 자바 힙 (메모리) 덤프 때, 내 모델 자바 클래스의 여러 인스턴스가 Observable이 반복 될 때마다 증가 할 것입니다.
RX가 내 모델의 여러 인스턴스를 만드는 이유는 무엇입니까? 하나의 인스턴스 만 사용하려면 어떻게해야합니까?안드로이드 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