Can RxJava2 CompositeDisposable Clean Itself of Disposed Subscriptions?
up vote
0
down vote
favorite
From time to time me App triggers a Single for a network request, which I add to a CompositeDisposable in case I need to cancel all pending network requests.
The CompositeDisposable will add a Disposable to a inner HasSet, so with time the more Singles I add, the more memory the CompositeDisposable will take.
Are there any ways for the CompositeDisposable to make a "clean up", removing all disposed Disposabled from its inner HashSet saving up memory?
rx-java2
|
show 5 more comments
up vote
0
down vote
favorite
From time to time me App triggers a Single for a network request, which I add to a CompositeDisposable in case I need to cancel all pending network requests.
The CompositeDisposable will add a Disposable to a inner HasSet, so with time the more Singles I add, the more memory the CompositeDisposable will take.
Are there any ways for the CompositeDisposable to make a "clean up", removing all disposed Disposabled from its inner HashSet saving up memory?
rx-java2
This is not supported. You have to remember each disposable and remove them manually. The easiest way is to useDisposableSingleSubscriberandsubscribeWithso that theonSuccessandonErrorimplementation can simply callremove(this).
– akarnokd
Nov 8 at 22:24
Is it a lot of work to add a method onCompositeDisposibleto iterate into theHashSetand removed alreadydisposedsubscriptions, like acleanDisposed()?
– mFeinstein
Nov 8 at 22:36
We'd rather not call an arbitraryisDisposedwhile holding a lock, however, It would be possible to add agetDisposablesthat returns a list of all known disposables. At this point though, you may be also inclined to implement a customCompositeDisposablecontainer for yourself.
– akarnokd
Nov 8 at 22:54
I think agetDisposablesis good enough, it can be iterated even without a lock, worst case just some very few subscriptions will have disposed and we won't see them as disposed, but still can clean up all the others that for sure are already disposed, something like a "best effort to clean without slowing down the code"
– mFeinstein
Nov 8 at 23:07
May I open a feature request forCompositeDispodablesubscribe to thecompleteanderrorof the added Observable and remove it automatically?
– mFeinstein
Nov 8 at 23:09
|
show 5 more comments
up vote
0
down vote
favorite
up vote
0
down vote
favorite
From time to time me App triggers a Single for a network request, which I add to a CompositeDisposable in case I need to cancel all pending network requests.
The CompositeDisposable will add a Disposable to a inner HasSet, so with time the more Singles I add, the more memory the CompositeDisposable will take.
Are there any ways for the CompositeDisposable to make a "clean up", removing all disposed Disposabled from its inner HashSet saving up memory?
rx-java2
From time to time me App triggers a Single for a network request, which I add to a CompositeDisposable in case I need to cancel all pending network requests.
The CompositeDisposable will add a Disposable to a inner HasSet, so with time the more Singles I add, the more memory the CompositeDisposable will take.
Are there any ways for the CompositeDisposable to make a "clean up", removing all disposed Disposabled from its inner HashSet saving up memory?
rx-java2
rx-java2
asked Nov 8 at 21:38
mFeinstein
2,14072776
2,14072776
This is not supported. You have to remember each disposable and remove them manually. The easiest way is to useDisposableSingleSubscriberandsubscribeWithso that theonSuccessandonErrorimplementation can simply callremove(this).
– akarnokd
Nov 8 at 22:24
Is it a lot of work to add a method onCompositeDisposibleto iterate into theHashSetand removed alreadydisposedsubscriptions, like acleanDisposed()?
– mFeinstein
Nov 8 at 22:36
We'd rather not call an arbitraryisDisposedwhile holding a lock, however, It would be possible to add agetDisposablesthat returns a list of all known disposables. At this point though, you may be also inclined to implement a customCompositeDisposablecontainer for yourself.
– akarnokd
Nov 8 at 22:54
I think agetDisposablesis good enough, it can be iterated even without a lock, worst case just some very few subscriptions will have disposed and we won't see them as disposed, but still can clean up all the others that for sure are already disposed, something like a "best effort to clean without slowing down the code"
– mFeinstein
Nov 8 at 23:07
May I open a feature request forCompositeDispodablesubscribe to thecompleteanderrorof the added Observable and remove it automatically?
– mFeinstein
Nov 8 at 23:09
|
show 5 more comments
This is not supported. You have to remember each disposable and remove them manually. The easiest way is to useDisposableSingleSubscriberandsubscribeWithso that theonSuccessandonErrorimplementation can simply callremove(this).
– akarnokd
Nov 8 at 22:24
Is it a lot of work to add a method onCompositeDisposibleto iterate into theHashSetand removed alreadydisposedsubscriptions, like acleanDisposed()?
– mFeinstein
Nov 8 at 22:36
We'd rather not call an arbitraryisDisposedwhile holding a lock, however, It would be possible to add agetDisposablesthat returns a list of all known disposables. At this point though, you may be also inclined to implement a customCompositeDisposablecontainer for yourself.
– akarnokd
Nov 8 at 22:54
I think agetDisposablesis good enough, it can be iterated even without a lock, worst case just some very few subscriptions will have disposed and we won't see them as disposed, but still can clean up all the others that for sure are already disposed, something like a "best effort to clean without slowing down the code"
– mFeinstein
Nov 8 at 23:07
May I open a feature request forCompositeDispodablesubscribe to thecompleteanderrorof the added Observable and remove it automatically?
– mFeinstein
Nov 8 at 23:09
This is not supported. You have to remember each disposable and remove them manually. The easiest way is to use
DisposableSingleSubscriber and subscribeWith so that the onSuccess and onError implementation can simply call remove(this).– akarnokd
Nov 8 at 22:24
This is not supported. You have to remember each disposable and remove them manually. The easiest way is to use
DisposableSingleSubscriber and subscribeWith so that the onSuccess and onError implementation can simply call remove(this).– akarnokd
Nov 8 at 22:24
Is it a lot of work to add a method on
CompositeDisposible to iterate into the HashSet and removed already disposed subscriptions, like a cleanDisposed()?– mFeinstein
Nov 8 at 22:36
Is it a lot of work to add a method on
CompositeDisposible to iterate into the HashSet and removed already disposed subscriptions, like a cleanDisposed()?– mFeinstein
Nov 8 at 22:36
We'd rather not call an arbitrary
isDisposed while holding a lock, however, It would be possible to add a getDisposables that returns a list of all known disposables. At this point though, you may be also inclined to implement a custom CompositeDisposable container for yourself.– akarnokd
Nov 8 at 22:54
We'd rather not call an arbitrary
isDisposed while holding a lock, however, It would be possible to add a getDisposables that returns a list of all known disposables. At this point though, you may be also inclined to implement a custom CompositeDisposable container for yourself.– akarnokd
Nov 8 at 22:54
I think a
getDisposables is good enough, it can be iterated even without a lock, worst case just some very few subscriptions will have disposed and we won't see them as disposed, but still can clean up all the others that for sure are already disposed, something like a "best effort to clean without slowing down the code"– mFeinstein
Nov 8 at 23:07
I think a
getDisposables is good enough, it can be iterated even without a lock, worst case just some very few subscriptions will have disposed and we won't see them as disposed, but still can clean up all the others that for sure are already disposed, something like a "best effort to clean without slowing down the code"– mFeinstein
Nov 8 at 23:07
May I open a feature request for
CompositeDispodable subscribe to the complete and error of the added Observable and remove it automatically?– mFeinstein
Nov 8 at 23:09
May I open a feature request for
CompositeDispodable subscribe to the complete and error of the added Observable and remove it automatically?– mFeinstein
Nov 8 at 23:09
|
show 5 more comments
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216525%2fcan-rxjava2-compositedisposable-clean-itself-of-disposed-subscriptions%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
This is not supported. You have to remember each disposable and remove them manually. The easiest way is to use
DisposableSingleSubscriberandsubscribeWithso that theonSuccessandonErrorimplementation can simply callremove(this).– akarnokd
Nov 8 at 22:24
Is it a lot of work to add a method on
CompositeDisposibleto iterate into theHashSetand removed alreadydisposedsubscriptions, like acleanDisposed()?– mFeinstein
Nov 8 at 22:36
We'd rather not call an arbitrary
isDisposedwhile holding a lock, however, It would be possible to add agetDisposablesthat returns a list of all known disposables. At this point though, you may be also inclined to implement a customCompositeDisposablecontainer for yourself.– akarnokd
Nov 8 at 22:54
I think a
getDisposablesis good enough, it can be iterated even without a lock, worst case just some very few subscriptions will have disposed and we won't see them as disposed, but still can clean up all the others that for sure are already disposed, something like a "best effort to clean without slowing down the code"– mFeinstein
Nov 8 at 23:07
May I open a feature request for
CompositeDispodablesubscribe to thecompleteanderrorof the added Observable and remove it automatically?– mFeinstein
Nov 8 at 23:09