当你没有使用 unbind() 时究竟会发生什么?
What exactly happens when you fail to use unbind()?
我有一个使用 Butterknife 的应用程序,最近我发现了一个片段,我在该片段的 onDestroyView()
中调用 unbinder.unbind()
失败。我解决了这个问题,但这让我开始思考。
这会导致什么样的错误?为什么?我现在没有特别的错误,但我想知道以后要注意什么,图书馆的网站没有具体说明这可能导致的问题。
假设您有一个 retained fragment 并且您已经使用 @BindView
初始化了一个视图。
方向发生变化,导致 activity 个实例被破坏,但这个片段没有被破坏,因为这个片段是一个保留的片段,这意味着你初始化的字段仍然存在(不是 null
) 并持有对先前 activity 视图的强引用,这导致 activity 的泄漏。
虽然这可能需要一些时间(因为最终你会在 onViewCreated()
中执行另一个 ButterKnife.bind()
,对吧?但谁知道呢,也许你不会),仍然最好在不需要时立即释放资源,让 GC 完成它的工作。
我前段时间也考虑过这个问题,除此之外,我想不出另一个强烈需要 unbind()
的场景。
我有一个使用 Butterknife 的应用程序,最近我发现了一个片段,我在该片段的 onDestroyView()
中调用 unbinder.unbind()
失败。我解决了这个问题,但这让我开始思考。
这会导致什么样的错误?为什么?我现在没有特别的错误,但我想知道以后要注意什么,图书馆的网站没有具体说明这可能导致的问题。
假设您有一个 retained fragment 并且您已经使用 @BindView
初始化了一个视图。
方向发生变化,导致 activity 个实例被破坏,但这个片段没有被破坏,因为这个片段是一个保留的片段,这意味着你初始化的字段仍然存在(不是 null
) 并持有对先前 activity 视图的强引用,这导致 activity 的泄漏。
虽然这可能需要一些时间(因为最终你会在 onViewCreated()
中执行另一个 ButterKnife.bind()
,对吧?但谁知道呢,也许你不会),仍然最好在不需要时立即释放资源,让 GC 完成它的工作。
我前段时间也考虑过这个问题,除此之外,我想不出另一个强烈需要 unbind()
的场景。