【问题标题】:How do I check if everything in a screen is disposed?如何检查屏幕中的所有内容是否已处理?
【发布时间】:2020-04-18 19:43:26
【问题描述】:

我是 Flutter 新手,我想确保在弹出屏幕时没有任何松散的初始化。有没有办法检查变量、侦听器或流的松散初始化以避免内存泄漏?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以通过重写 dispose 方法删除所有侦听器或流

      @override
      void dispose() {
        super.dispose();
        //listeners to remove
      }
    

    查看 Flutter 生命周期示例:Life cycle in flutter

    【讨论】:

      【解决方案2】:

      在你的 BLoC 中创建一个 dispose 方法

        final _someSubject = BehaviorSubject<List<int>>();
      
        ...
      
        Stream<List<int>> get someStream => _someSubject.stream;
      
        ...
      
        dispose() async {
          await _someSubject.drain();
          _someSubject.close();
        }
      

      然后在您的页面上调用 dispose

        @override
        void dispose() {
          _someBloc.dispose();
          super.dispose();
        }
      

      阅读更多about排水和close

      【讨论】:

      • 实际上并没有回答问题
      【解决方案3】:

      简答:没有简单的方法。


      默认情况下,Dart,至少将其视为一种语言和虚拟机,而不是围绕它的所有工具,不会警告您内存泄漏,您可以使用可以帮助您识别和修复内存泄漏的分析工具,但是毕竟,这是一项手工工作。

      如果我们考虑我们拥有的所有工具,那么有些工具可以帮助您静态识别潜在的内存泄漏。例如dart analyzer工具有a built-in linter that detects unclosed sinks,这是内存泄漏的潜在原因之一。

      除了这个 linter,我不知道有任何其他工具可以静态地为您提供有关潜在内存泄漏的提示。也许SonarQube plugin for Dart/Flutter 有什么东西,但我从来没有用过,所以我不知道。

      如果您愿意,您可以使用analyzer package 开发您自己的静态分析工具,甚至可以通过analyzer_plugin 将其集成到您的编辑器中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 2014-12-15
        • 2020-09-19
        • 2013-04-16
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多