Rx java 订阅observable时如何确保GC

Rx java 订阅observable时如何确保GC,rx-java,rx-java2,Rx Java,Rx Java2,我有一个类,它接受一个可观察的并订阅它 静态类助手{ 空穴下标(可观测){ 可观察。订阅(someObject->{ //用某物做某事; }); } } 当设置为null时,是否有任何方法可以确保此类本身取消订阅 void main(){ Helper=newhelper(); Observable Observable=…//一个永远不会完成的可观察对象 helper.subscribeTo(可观察); ... helper=null;//helper将永远不会被GC调用,因为observa

我有一个类,它接受一个可观察的
并订阅它

静态类助手{
空穴下标(可观测){
可观察。订阅(someObject->{
//用某物做某事;
});
}
}
当设置为
null
时,是否有任何方法可以确保此类本身取消订阅

void main(){
Helper=newhelper();
Observable Observable=…//一个永远不会完成的可观察对象
helper.subscribeTo(可观察);
...
helper=null;//helper将永远不会被GC调用,因为observable永远不会完成
}
在本例中,如果给它一个永无止境的
可观察的
,那么它很容易被滥用

我能想到的最佳解决方案是允许(但不是强制)实例化类在设置为null之前清理helper类:

静态类助手{
私人一次性用品;
空穴下标(可观测){
//用某物做某事;
一次性=可观察。订阅(someObject->{
//用某物做某事;
});
}
空洞清理(){
一次性的,一次性的;
}
}
void main(){
Helper=newhelper();
Observable Observable=…//一个永远不会完成的可观察对象
helper.subscribeTo(可观察);
...
helper.cleanup();
helper=null;
}

您将不得不依靠用户以某种方式取消订阅。为什么不把一次性的
递给他们,让他们使用呢

静态类助手{
一次性subscribeTo(可观察){
返回可观察的。订阅(someObject->{
//用某物做某事;
});
}
}

Late update,但是:由于我在Android环境中使用它,我制作了
Helper
implement
Closable
,然后使用StrictMode找出main()在通过
DetectLekedClosableObjects进行调零之前没有调用close的时间: