JetPack 以官方的方案,解决了很多我们头疼的问题。JetPack 作为一整套的解决方案,不是一篇文章很够解释清楚的。正如官方所说:
Android Jetpack 组件是库的集合,这些库是为协同工作而构建的,不过也可以单独采用,同时利用 Kotlin 语言功能帮助您提高工作效率。可全部使用,也可混合搭配!
文章重点部分将聚焦:
- Lifecycle
- ViewModel
- LiveData
- 实战设计
文章涉及库的添加方式,在项目根目录 build.gradle 文件添加仓库依赖:
allprojects {
repositories {
jcenter()
google()
}
}
主 module 的build.gradle 文件添加需要依赖的组件:
def Lifecycle_version = "1.1.1"
// ViewModel and LiveData
compile "android.arch.Lifecycle:extensions:$Lifecycle_version"
// alternatively - just ViewModel
compile "android.arch.Lifecycle:viewmodel:$Lifecycle_version" // use -ktx for Kotlin
// alternatively - just LiveData
compile "android.arch.Lifecycle:livedata:$Lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
compile "android.arch.Lifecycle:runtime:$Lifecycle_version"
Lifecycle 篇
1.1 日常管理生命周期
Lifecycle 的出现帮我们解决生命周期管理的问题。这个问题对于我们日常开发来说的确是比较“坑”的一点,生命周期处理不当,很容易造成内存泄漏。
为了能让我们业务代码感知到生命周期,我们可能会写大量重复的代码。比如在 MVP 中让 Presenter 拥有感知生命周期的能力,我们可能会这么做:
public interface IPresenter {
void onCreate();
void onStart();
// 省略其他周期
}
然后在具体的 Presenter 中实现此接口,并在 Activity/Fragment 的生命周期中调用这个接口,完成工作。
这种方式完全通俗易懂,这里我不评价它的好坏,毕竟没有任何一种解决方案是完美的。因此这里就不多哔哔啦,咱们直接来看一看官方的 Lifecycle 是怎样的一种思路。
Lifecycle 管理生命周期
说破天,这里需要解决的问题是生命周期管理。那么终究还是逃脱不掉一些套路成分在其中。Lifecycle 也是如此,从官方的解释中,可见一斑:
Lifecycle is a class that holds the information about the Lifecycle state of a component (like an activity or a fragment) and allows other objects to observe this state.
短短一段话,我们可以猜测到这里通过观察者模式的思路去对外响应生命周期变化。闲话少说,直接从代码感受一下。