我有一个片段,我在其中执行API请求。这个片段可以作为片段替换的结果返回到后台,然后再返回。
那个时候因为只重新创建了视图,所以我不想重新执行Api调用。
为此我做了,我在存储库multicasted
中进行了Api调用,如下所示
public Flowable<List<Movie>> getMovies() {
return mRemoteRepository.getMovies()
.flatMap(movieResponse -> Flowable.fromCallable(() -> {
List<Movie> movies = new ArrayList<>();
for (MovieResponse.Result result : movieResponse.results) {
Movie movie = new Movie();
movie.setName(result.title);
movies.add(movie);
}
return movies;
})).replay().refCount();
}
我的目的是将旧结果重播给新订阅者。因此,在片段视图重新创建之后,如果我再次接到调用 相同的Api请求它会重播旧的响应。 但是在这里我可以看到每当我从后台回来时它都会重新执行。
我认为这是因为当Api呼叫完成时,之前的getMovies()
将完成发射。
它是否正确? replay().refcount()
仅在正在进行的排放期间以及新用户是否进入时才会执行重播?
然后我尝试replay().autoConnect()
,它按预期工作。它不会复制API请求
当碎片从后台堆回来时。所以我能理解的是autoconnect()
会保留
即使{A {1}}使用Api调用完成,也可以观察到活动状态。
这是对的吗?但是在我的情况下使用它会导致任何内存泄漏或内存问题吗?
在我的api电话中使用getMovies()
是否安全?如何终止autoConnect
Observable
当我的片段本身被删除?
答案 0 :(得分:0)
要使用autoConnect()
终止流,请在takeUntil()
之前使用autoConnect()
,并在需要“丢弃”流时触发事件。
stream().takeUntil(detachEvent())
.onTerminateDetach()
.replay().autoConnect()
.onTerminateDetach()