停用和处置之间的区别?

Posted

技术标签:

【中文标题】停用和处置之间的区别?【英文标题】:Difference Between Deactivate and Dispose? 【发布时间】:2019-10-16 15:22:27 【问题描述】:

在 Flutter 中,StatefulWidget 有dispose()deactivate()。它们有何不同?

【问题讨论】:

【参考方案1】:

停用:

从树中删除对象时调用。在某些情况下,框架会将 State 对象重新插入到树的另一部分(例如,如果包含此 State 对象的子树从树中的一个位置移植到另一个位置)。 source

处置:

当此对象从树中永久移除时调用。 source

通过理解这两个句子,您会看到对于从树中移除的小部件,暂时或永久会调用 deactivate,而 会调用 dispose用于永久删除的小部件。

感谢 Antonio Oliveira 提供链接,现在我明白了。

【讨论】:

简而言之,当State由于使用GlobalKey而从子树A中移除并重新插入到子树B中时,只会调用deactivate()生命周期方法,dispose()是未调用(因此,State 只是被停用但在这种情况下未被处置)。当 State 从树中永久删除时,首先调用 deactivate(),然后再调用 dispose()【参考方案2】:

dispose 是确定的。 deactivate 不是。

deactivate 在小部件可能被释放时被调用。但这不能保证。

调用deactivate 但不调用dispose 的典型情况是使用GlobalKey 在小部件树中移动小部件时。

【讨论】:

这个有来源吗?谢谢 @BenButterworth this is the link for the deactivate method 和 this is the dispose method

以上是关于停用和处置之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

EXW,FOB,CIF 贸易术语的区别?

什么是Service以及描述下它的生命周期。Service都有哪些启动方法,有什么区别,怎样停用Service?

尝试/最终阻止与调用处置?

在JAVA中已检查异常和位未检查异常是啥?二者有何区别?

FOB与EXW的区别

等级保护和分级保护区别与联系