我正在使用MVP架构,现在遇到了如何正确释放presenter的问题。首先,让我告诉大家发生了什么。
问题:
1)我的presenter发出一个异步服务器请求。
2)当我接收到服务器响应时,我的视图(fragment)已经分离,但我仍然保留着它的实例,这可能会导致内存泄漏,并且我还调用了来自View的方法来设置从服务器接收的一些数据。
3)在我的视图中,我使用从“getActivity()”方法获取的上下文,在此阶段将返回null。
我尝试解决这个问题的方式:
1)当我分离Fragment时,我在presenter上调用“release()”方法。在这种方法中,我考虑将我的view实例设置为null。这样做是可行的,但我需要在我的presenter中添加null检查,以检查我的视图是否已经设置为null。这似乎不是最好的方法。
2)在我的视图(fragment)中,在使用之前检查“getActivity()”是否为null。但这并不能解决内存泄漏问题,并且我需要在我的所有片段中添加此检查;
你们有其他的建议吗?有没有一种适当的方法来释放我的presenter,使得每当我的presenter调用我的视图上的方法时,我都可以确信视图已连接到活动中?EventBus是否是一种好的解决方案?
非常感谢!
问题:
1)我的presenter发出一个异步服务器请求。
2)当我接收到服务器响应时,我的视图(fragment)已经分离,但我仍然保留着它的实例,这可能会导致内存泄漏,并且我还调用了来自View的方法来设置从服务器接收的一些数据。
3)在我的视图中,我使用从“getActivity()”方法获取的上下文,在此阶段将返回null。
我尝试解决这个问题的方式:
1)当我分离Fragment时,我在presenter上调用“release()”方法。在这种方法中,我考虑将我的view实例设置为null。这样做是可行的,但我需要在我的presenter中添加null检查,以检查我的视图是否已经设置为null。这似乎不是最好的方法。
2)在我的视图(fragment)中,在使用之前检查“getActivity()”是否为null。但这并不能解决内存泄漏问题,并且我需要在我的所有片段中添加此检查;
你们有其他的建议吗?有没有一种适当的方法来释放我的presenter,使得每当我的presenter调用我的视图上的方法时,我都可以确信视图已连接到活动中?EventBus是否是一种好的解决方案?
非常感谢!