Android模型-视图-演示者(MVP)如何返回长时间运行的AsyncTask



我对Android有点陌生,我正在编写一个应用程序。我正在开始更彻底地测试我的代码,因此,我想实施MVP设计策略,因为它为代码添加了更多的可测试层。使用MVP的一个我似乎无法理解的好处是,它如何帮助运行AsyncTasks,因为它们是动态执行的。既然你想在Presenter类中避免任何Android特定的组件,你应该如何引用利用AsyncTasksActivity ?关于MVP的教程显示Presenter对象具有将Activity作为参数并返回给它的方法;但是,如果您的AsyncTask花费了很长时间,并且您的Activity已经通过诸如旋转变化之类的事情被破坏,您如何返回到正确的Activity ?我目前将AsyncTask存储在Fragment中,以便在方向更改时保存。我很难找到一个实现MVP实践的解决方案。

回答你的问题,你可以做的不多,以避免传递Android类到你的Presenter类。但是,不是将Android对象作为参数传递,而是在视图类中添加一个返回它的方法(例如getActivity())。

也就是说,我强烈建议您使用Loader而不是AsyncTaskLoaders是专门为您的用例设计的。它们也可以在后台运行,但它们的生命周期与ActivityFragment的生命周期相关联。

如果您切换到Loaders,添加一个方法,如getLoaderManager()到您的视图接口

如果我不理解你的问题,你正试图使用retained non-UI fragment long-runing task,对吗?以下是我对你的建议:

  1. 为你的Activity制作ActivityView interface
  2. 使用WeakReference<ActivityView>Fragment Presenter内引用您的活动(以避免内存泄漏问题)
  3. Activity重新创建时,尝试获得retained fragment并重置Fragment PresenterActivityView。你可以看看这个谷歌的例子,了解如何处理加载数据,而配置改变。

总之,只使用WeakReference来避免内存泄漏问题,并尝试在重新创建活动时重新设置Presenterview

最新更新