我正在GWT应用程序中实现MVP模式.在每个历史记录标记更改时,我正在初始化演示者以获取相应的视图.如果用户导航到单个视图GridView(比如说)2次,那么相应的演示者GridViewPresenter(说)初始化2次(根据MVP模式.如果我们不将演示者作为singelton).喜欢
Presenter presenter = new GridViewPresenter();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,此演示者中的所有事件都将注册并收听2次.如果不让我们的主持人singelton,我们怎么能避免这种情况.
您必须跟踪演示者的生命周期(在切换到新的生命周期之前,处理当前的演示者,以便取消注册其处理程序).
或者,您可以使用Places与活动微架构从GWT,即做到了这一点:您活动有明确的start和onStop和onCancel(当异步启动).
GWT-Platform(GWT的MVP框架)也具有类似的生命周期.
另一种方法是不让您的演示者在其视图上添加处理程序:视图管理其事件处理程序,并通过表示为接口的合同(实现该接口的演示者)通知演示者; 对于给定视图,一次只能有一个演示者(这样,新演示者将覆盖前一个演示者).
管理演示者生命周期的优势在于,演示者可以在不再使用时立即进行垃圾收集,而不是等待新的演示者在单例/长期视图中占据一席之地.