Dart流.asBroadcastStream内存泄漏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart流.asBroadcastStream内存泄漏相关的知识,希望对你有一定的参考价值。

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

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

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

答案

.asBroadcastStream()文档中:

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

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

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

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

以上是关于Dart流.asBroadcastStream内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

在 Dart 中,如何确保流更新在继续之前完成?

Dart/Flutter POST 请求和流响应

Flutter必备语言Dart教程02 - 控制流,异常

Flutter / Dart / Firebase - 流返回空列表

Flutter入门Dart语言:控制流语句的基本用法

Dart:如何通过流将数据从一个进程传递到另一个进程