我正在重构Swing应用程序以使用Guava的EventBus。 Swing应用程序基本上运行一个决策过程,在JFrame中显示大量结果,然后在JFrame关闭后进行处理。现在它还订阅了一个EventBus来处理用户对数据的操作。
我的问题是这个。我担心EventBus可能会在关闭后持有对JFrame及其所有内部引用(包括所有模型数据)的引用。是否足以添加一个WindowListener来取消订阅EventBus,因此垃圾收集可以释放数据和底层模型?或者这是我不需要担心的事情?
答案 0 :(得分:2)
您需要unregister
之前注册的所有组件no WeakEventBus。
请注意,取消注册对象
@throws IllegalArgumentException if the object was not previously registered.
除非对象没有@Subscribe
方法。 Javadoc并不精确,因为注册和取消注册此类对象都不做任何事情(并且永远不会抛出)。