如何在使用RxJava调用另一个方法之前等待

问题描述 投票:0回答:1

例如,我正在启动一个完成并返回结果的活动,该结果由方法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?
    }
}
java android reactive-programming rx-java2 rx-android
1个回答
0
投票

例如,通过使用PublishSubject可能会在onActivityResult()中通知,并且你可以在原始电话中使用flatMap(),但我强烈建议不要这样做。原因如下:

当你的Activity收到onActivityResult()时,它可能只是从头开始重新创建,因为配置更改,内存压力或同时发生的任何其他事情。这意味着您的Single订阅不再有效(如果您在onDestroy()中正确取消订阅onStop()或更好)或将之前的活动实例泄露给它仍然附加的内容(如果您没有取消订阅)。

所以,相反,流(以及前面提到的PublishSubject)可能应该存在于活动重新生成的组件内,就像保留的片段一样,你应该在onActivityResult()中调用它来通知你的流有关结果。这是some example如何保留片段和RxJava可以一起工作。

© www.soinside.com 2019 - 2024. All rights reserved.