Dart流.asBroadcastStream内存泄漏

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

在我们的Flutter应用程序中,我们的内存泄漏和流没有关闭。我们将源代码追溯到以下代码:]

Rx.combineLatest(...).asBroadcastStream()

RxDart .combineLatest()的结果是单订阅流。添加.asBroadcastStream()使流可方便地用于我们的各种Flutter显示器。但是,当关闭这些显示时,合并的流仍处于活动状态。

dart stream rxdart
1个回答
0
投票

.asBroadcastStream()文档中:

返回的流将在添加其第一个订阅者时订阅该流,并且将保持订阅,直到该流结束,或者回调取消订阅

因此,根据设计,流将一直存在,直到明确取消为止。要在最后一个监听器取消时取消订阅,请使用:

Rx.combineLatest(...).asBroadcastStream( onCancel: (sub) => sub.cancel() )

Stream.asBroadcastStream - Easy to cause leaks, what is the rationale? #26686中有进一步的讨论

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