我正在学习如何使用Observable.create()。所以我创建了以下发布的示例。但是当我运行该应用程序时。然后单击按钮中的日志语句 当.create()中的log语句立即显示时,永远不会显示call()方法。 我希望显示call()中的log语句,但是没有。
请让我知道为什么下面的日志语句 Log.i(TAG,“ ++++++++++ STARTED +++++++++”);
从不显示。
代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private Button btnStart = null;
private TextView tvText = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.btnStart = (Button) findViewById(R.id.btnStart);
this.tvText = (TextView) findViewById(R.id.tvText);
Observable.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.i(TAG, "++++++++++ STARTED +++++++++");
Thread.sleep(5000);
return null;
}
})
.create(e -> {
Log.i(TAG, "++++++++++ CREATED +++++++++");
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
e.onNext(i[0]++);
}
});
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Object o) {
Log.i(TAG, "o: " + o.toString());
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
答案 0 :(得分:1)
您从可调用对象创建的可观察对象实际上在调用create时会被丢弃,后者会创建您实际订阅的新流。