使用 DI 将 BLoC 作为单例注入的效果以及在哪里关闭流?
Posted
技术标签:
【中文标题】使用 DI 将 BLoC 作为单例注入的效果以及在哪里关闭流?【英文标题】:Effects of Injecting BLoC as a singleton using DI and where to close stream? 【发布时间】:2020-02-26 21:19:35 【问题描述】:我正在使用 inject.dart 将我的 bloc 作为单例注入,这是一种不好的做法,即导致内存泄漏?
由于我使用的所有流都是来自 RxDart 的广播流,我想知道单例是否会更好?
如果不是一个坏习惯,关闭流的最佳位置是什么? 在有状态小部件(订阅 bloc)的 Dispose() 中执行此操作会导致问题,因为其他小部件可能仍在使用流?
【问题讨论】:
【参考方案1】:您不应该使用单例,因为它会消耗太多内存。而是将 bloc 注册为工厂类。
查看这个 github 问题 - https://github.com/felangel/bloc/issues/711
如果您在处置 bloc 后将它们注册为单例,则无法再次使用该 bloc,但如果您注册为工厂,则可以在小部件的 void dispose()...
方法中处置它。
【讨论】:
以上是关于使用 DI 将 BLoC 作为单例注入的效果以及在哪里关闭流?的主要内容,如果未能解决你的问题,请参考以下文章