我有一个关于Android中MVP模式的问题。我想编写自己的“应用程序核心”,其中将具有基础类来处理Presenter、View等。它必须简单、干净且“稳定”。我的想法与Mosby所提供的非常相似,我正在尝试实现类似于以下内容的东西:
1. 每个Activity都有自己的Presenter、View(与Activity通信的接口)、ViewState(持久化数据的可包装对象)。
2. 当Activity被销毁时:
- 分离View - 在bundle中保存ViewState - 取消Presenter中所有后台任务(完成时更新View的任务) - 销毁Presenter 3. 当Activity被重新创建时:
- 附加View - 恢复ViewState - 创建Presenter的新实例 - 重新启动已取消的后台任务
除了最后一个问题 - “重新启动已取消的后台任务”之外,我几乎做到了所有事情。通过一个例子讨论这个问题会更容易。假设我在Presenter中有两个方法(Retrofit 2调用):
- downloadUsers() - 从Web服务器获取用户数据,并在成功时更新View。 - downloadProject() - 从Web服务器获取项目信息,并在成功时更新View。
现在,当用户更改配置时,其中一个调用已经启动但尚未完成。如何知道在Presenter重新创建时应重新启动哪个调用?
我脑海中唯一的想法是为每个任务创建一个持久的布尔标志,在任务启动时将其设置为true,在任务完成时将其设置为false。当Presenter被创建时,我将检查每个标志并重新启动相应的调用。
你对此有何看法?如何改进?还有其他想法吗?
1. 每个Activity都有自己的Presenter、View(与Activity通信的接口)、ViewState(持久化数据的可包装对象)。
2. 当Activity被销毁时:
- 分离View - 在bundle中保存ViewState - 取消Presenter中所有后台任务(完成时更新View的任务) - 销毁Presenter 3. 当Activity被重新创建时:
- 附加View - 恢复ViewState - 创建Presenter的新实例 - 重新启动已取消的后台任务
除了最后一个问题 - “重新启动已取消的后台任务”之外,我几乎做到了所有事情。通过一个例子讨论这个问题会更容易。假设我在Presenter中有两个方法(Retrofit 2调用):
- downloadUsers() - 从Web服务器获取用户数据,并在成功时更新View。 - downloadProject() - 从Web服务器获取项目信息,并在成功时更新View。
现在,当用户更改配置时,其中一个调用已经启动但尚未完成。如何知道在Presenter重新创建时应重新启动哪个调用?
我脑海中唯一的想法是为每个任务创建一个持久的布尔标志,在任务启动时将其设置为true,在任务完成时将其设置为false。当Presenter被创建时,我将检查每个标志并重新启动相应的调用。
你对此有何看法?如何改进?还有其他想法吗?
storeUsers()
执行在自己的Android服务中可能是个好主意,因为你不想在屏幕方向改变时重新执行storeUser()
,对吧?所以,在服务中执行storeUser()
,让Presenter观察服务(使用EventBus、RxJava或其他你熟悉的方式)。 - sockeqwe