在我们的 Flutter 应用程序中,我们存在内存泄漏和流未关闭的情况。我们追踪源代码如下:
Rx.combineLatest(...).asBroadcastStream()
RxDart的结果.combineLatest()
是单订阅流。添加.asBroadcastStream()
使流可以方便地用于我们的各种 Flutter 显示器。然而,当这些显示关闭时,正在组合的流仍然处于活动状态。
来自.asBroadcastStream()
文档:
当添加第一个订阅者时,返回的流将订阅该流,并且将保持订阅状态,直到该流结束,或者回调取消订阅.
因此,按照设计,流会一直存在,直到明确取消为止。要在最后一个侦听器取消时取消订阅,请使用:
Rx.combineLatest(...).asBroadcastStream( onCancel: (sub) => sub.cancel() )
有进一步的讨论Stream.asBroadcastStream - 容易造成泄露,原理是什么? #26686 https://github.com/dart-lang/sdk/issues/26686
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)