【问题标题】:Does passing BuildContext inside a static method causes memory leak in Flutter?在静态方法中传递 BuildContext 会导致 Flutter 中的内存泄漏吗?
【发布时间】:2019-12-04 15:14:32
【问题描述】:

我正在尝试显示一个对话框,该对话框可在我的应用程序的任何地方重复使用。该对话框需要BuildContext,因此我创建了一个类并添加了一个静态方法来显示对话框,并在静态方法中传递了一个BuildContext 作为参数。这会导致任何内存泄漏吗?就 Native Android 而言,我知道如果静态方法返回 UI,则在静态方法中传递活动上下文会导致方法泄漏。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    可能是的。这将阻止垃圾收集器从该对象中释放内存。根据this dart-lang issue 中的答案,只要有可访问的引用 - 该对象将保存在内存中。

    因此,一般情况下,不建议将BuildContext 对象存储在静态字段中。

    但是,如果您获得顶部小部件的 BuildContext,该小部件不会在应用程序的生命周期内重新创建 - 应该没问题。 如果它可能被释放 - 覆盖 dispose() 方法并通过分配 null 值来清除引用。

    根据长期存在的异步任务 - 我不建议将BuildContext 传递给它们,因为只要任务正在执行,它肯定会导致内存泄漏。

    【讨论】:

    • 那么解决方案是什么在上下文的地方通过什么来显示模型类中的对话框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2020-01-31
    • 1970-01-01
    • 2011-08-16
    • 2017-11-11
    • 2013-07-26
    • 2021-03-23
    相关资源
    最近更新 更多