Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java 在方法内部创建临时可观察对象_Rx Java_Reactive - Fatal编程技术网

Rx java 在方法内部创建临时可观察对象

Rx java 在方法内部创建临时可观察对象,rx-java,reactive,Rx Java,Reactive,代码: static void readCharacteristic(RxBleDevice设备、UUID特征、Action1回调){ Observable deviceConnObservable=getSharedConnectionObservable(设备); deviceConnObservable .订阅( 回拨, throwable->Log.d(标记“Error”), ()->{}//已完成读取 ); } 我假设当方法退出时,deviceConnObservable被销毁。但是

代码:

static void readCharacteristic(RxBleDevice设备、UUID特征、Action1回调){
Observable deviceConnObservable=getSharedConnectionObservable(设备);
deviceConnObservable
.订阅(
回拨,
throwable->Log.d(标记“Error”),
()->{}//已完成读取
);
}
我假设当方法退出时,
deviceConnObservable
被销毁。但是订阅服务器中的处理程序呢?它们是否也消失了,或者它们是否继续生存并被调用——当
可观察的
被销毁时,可能是
onError()
处理程序


假设他们不这样做,有没有一种情况可以在方法中创建一个
可观察的
?如果您等待它的
onCompleted()
通知,似乎应该没问题,不是吗

如果您的
getSharedConnectionObservable
正在当前线程中运行,则订阅将在方法退出之前完成


如果您的
getSharedConnectionObservable
是异步的,则存在指向您的
Observable
的引用链

工作者(线程)
->
任务(Action0)
->{
下游(订阅方)
&
上游(可观察)
操作员订阅方
)}


您的
Observable
将完成,您可以自己尝试。

订阅的Observable要么在当前线程上同步执行(因此将在方法执行之前完成),要么使用调度程序执行,在这种情况下,调度程序将保留对Observable链的引用,包括委托,直到可观察对象完成。为了确保我理解,异步可观察对象的调度程序保存了一个引用,因此即使方法完成,可观察对象仍然存在。当调度程序处理完它(可能是通过unsubscribe()或onComplete()完成的),它就被释放了,并且可以被GC调用。对吗?@RobertLewis是的
static void readCharacteristic( RxBleDevice device, UUID characteristic, Action1<byte[]> callback ) {
    Observable<RxBleConnection> deviceConnObservable = getSharedConnectionObservable( device );
    deviceConnObservable
        .subscribe(
                callback, 
                throwable -> Log.d( TAG, "Error" ),
                () -> {  } // completed the read
        );
}