当你没有使用 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() 的场景。