例如,我正在启动一个完成并返回结果的活动,该结果由方法onActivityResult
返回。如何在onActivityResult
提供结果之前等待,然后继续我的反应流?
public class TestActivity extends AppCompatActivity {
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// receiving result here
}
private Single<Data> loadData() {
return Remote.getInstance().getData()
.flatMap(data -> {
// do something
Intent intent = new Intent(TestActivity.this, OtherActivity.class);
startActivityForResult(intent, 0);
}) // how can I receive the result from the onActivityResult here?
}
}
例如,通过使用PublishSubject
可能会在onActivityResult()
中通知,并且你可以在原始电话中使用flatMap()
,但我强烈建议不要这样做。原因如下:
当你的Activity
收到onActivityResult()
时,它可能只是从头开始重新创建,因为配置更改,内存压力或同时发生的任何其他事情。这意味着您的Single
订阅不再有效(如果您在onDestroy()
中正确取消订阅onStop()
或更好)或将之前的活动实例泄露给它仍然附加的内容(如果您没有取消订阅)。
所以,相反,流(以及前面提到的PublishSubject
)可能应该存在于活动重新生成的组件内,就像保留的片段一样,你应该在onActivityResult()
中调用它来通知你的流有关结果。这是some example如何保留片段和RxJava可以一起工作。