剑客
关注科技互联网

#Android# Fragment Presenter

#Android# Fragment Presenter

前言

用 Fragment 来实现 Presenter 我之前在这篇文章就已经提过了: #Android# 使用 Fragment 构建 Presenter – 『Android 还可以这样开发』 – 知乎专栏

这篇文章算是对之前的一些补充。

方案对比

看了一下目前的一些方案,包括:(以下称 屏幕旋转/意外回收时销毁时

使用 Fragment 的好处是可以同步 Activity 的生命周期方法,你可以很简单的将你老旧的代码从 Activity 迁移到 Fragment 上。

要注意在使用 Fragment 来实现 Presenter 时,setRetainInstance(true) 仅当当前 Fragment 为非 Nested 的时候才可用(只能为 Activity 的直接子 Fragment、不能为 Fragment 的子 Fagment),否则会报错。

所以说更推荐覆盖 onSaveInstanceState() 来保存数据,它在系统需要回收内存时能腾出更多的内存空间,不像其它方案一样依旧占用内存。

无法直接保存 Presenter 实例的话,需要注意在 Presenter 中进行的一些异步操作,它们在 Presenter 被回收时依然在后台运行,并且在异步操作中可能会访问 Presenter 内的一些属性,所以你可能需要在 Presenter 被回收时中止它们。

其实我是在说 ReactiveX Java。在我的项目中,基本上大部分异步操作都使用它来实现,所以我在 kotgo 中写了个 bindLifecycle() 拓展函数来将 Observable 的订阅绑定到 Presenter 的生命周期上,一旦 Presenter 被销毁时会及时终止异步流。

其它的问题暂时没有了。每个方案都各有优劣,得看具体场景。

想尝试 Kotlin 的伙伴可以看看 Kotgo 1.4 了: GitHub – nekocode/kotgo: :rocket: An android development framework using MVP architecture on kotlin. 它已经被用在多款产品上(甚至有已上架的大型应用),也间接证明了 Kotlin 目前的稳定性。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址