JakeWharton/RxBinding

Question about using RxBinding + VM

desgraci opened this issue · 1 comments

It is a good idea to have a RxBinding Observable passed to my VM, apply the business logic, then add to the VM disposable bag, and subscribing to that Observable on the Activity/Fragment?

Just wondering, since I have some Business logic on the VM for processing the input, but in theory I'm sending a reference of the view to the VM, which sounds, not that great, also there is a weird going back and forth that I don't personally like, how you guys think it would be best handled this cases?

If you pass an RxBInding observable into an android ViewModel and only dispose in the ViewModels onCleared method you'll end up leaking the activity, since the observable keeps a strong reference to the activity.

Here's a sample repository that uses LeakCanary to listen for leaks. If you run the app and rotate the screen and wait a few moments you'll see LeakCanary make some noise about a leaked activity.

From what I can tell the best option is to create a PublishSubject and subscribe to the observable produced via RxBInding in your Activity/Fragment and forward the passed through data to that PublishSubject. You can then dispose of the observable created in your Activity/Fragment.

This isn't a particularly satisfactory approach so I'm very open to any other suggestions.