Android 推出了他的Jetpack组件让Android开发者来快速构建Android App,其中就包括ViewModel,Lifecycles,LiveData。
ViewModel被用来存储View的状态,以及View相关的数据;Lifecycles被用来感知Activity或Fragment的生命周期;LiveData能够在数据集发生变化的同时通知UI(即View)作出相应改变。
LiveData在这里咱们能够用RxJava2代替,理论上ViewModel是不须要感知UI层的生命周期变化的,但咱们须要在UI状态发生变化的时候作一些相应的事情,因此让ViewModel能够感知到UI层的变化可让一些事变的更简单一点。java
通常得到ViewModel是经过以下方式: viewModel= viewModel= ViewModelProviders.of(this).get(ViewModel::class.java)
这里的this能够是Activity也能够是Fragment。但ViewModelProviders还有两个重载方法 public static ViewModelProvider of(@NonNull Fragment fragment, @Nullable Factory factory)
和前一个不一样之处是后面多了一个Factory类型的参数,这意味着ViewModel部分组件是经过工厂设计模式设计的,咱们能够经过自定义本身的Factory来生成咱们想要的ViewModel。最终咱们的调用方式变成了 LifecycleViewModelFactory.newInstance(activity!!.application, this)).get(modelClass)
接下来咱们须要先了解一下Android Lifycycles组件的使用android
首先能够肯定的是咱们须要自定义监听类而且须要继承LifecycleObserver
这样一个接口,你觉得这样就结束了吗?不!随后你会发现这个接口是一个空接口,咱们也不须要实现任何方法,那还怎么感知?别急,查看文档发现Google告诉咱们须要使用注解的方式来实现感知,如今咱们能够实现一个简单的感知类,如:设计模式
写以前的一点准备工做,咱们须要在你Project相应的Model模块下的build.gradle的dependencies下添加相应依赖,以下所示:app
dependencies { ··· implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' ··· }
如下代码都为kotlin,不在作提醒ide
class LifecycleViewModelObserver : LifecycleObserver{ @OnLifecycleEvent(Lifecycle.Event.ON_ANY) fun onAny(source:LifecycleOwner,event:Event) { } @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) fun onCreate(source:LifecycleOwner) { } @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart(source:LifecycleOwner) { } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun onResume(source:LifecycleOwner) { } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun onPause(source:LifecycleOwner) { } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onStop(source:LifecycleOwner) { } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroy(source:LifecycleOwner) { } }
以上代码应该应该很好理解了,每个被@OnLifecycleEvent注解的函数能够有0个或1个参数,第一个参数必须是LifecycleOwner
类型,函数名则不作限制。须要特别之处的是Lifecycle.Event.ON_ANY
,文档中对它的解释是在能够匹配全部事件的枚举常量,被@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
注解的函数能够是0个参数,或2个参数,而不能只有一个,且2个参数按顺序类型分别是LifecycleOwner
,Lifecycle.Event
。函数
文档中对添加参数的解释是:gradle
These additional parameters are provided to allow you to conveniently observe multiple providers and events without tracking them manually.
接下来就是怎么使用咱们新建的LifecycleViewModelObserver类了,依然很简单,如:
添加:lifecycle.addObserver(LifecycleViewModelObserver())
移除:lifecycle.removeObserver(LifecycleViewModelObserver())
在Activity和Fragment中都是一样的操做。ui
以上咱们应该熟悉了Lifecycles的简单使用方法。this
关于如何定制ViewModel在下一节再作演示。设计
让ViewModel也感知Activity(Fragment)的生命周期 #定制属于本身的ViewModel(二)(未完待续)