最近简单看了下google推出的框架Jetpack,感受此框架的内容能够对平时的开发有很大的帮助,也能够解决不少开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。java
Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:react
本片文章简单介绍其中一个组件Lifecycles,只是一个入门使用,后面会陆续介绍每一个组件的使用,但愿对没接触的同窗有点帮助,共同窗习新的东西。android
Lifecycles是一个持有组件生命周期状态(如活动或片断)信息的类,并容许其余对象观察此状态。生命周期使用两个主要枚举来跟踪其关联组件的生命周期状态:bash
Lifecycles:生命周期感知组件,从名字中就能够知道,这个方法是处理生命周期的相关的操做。在平时的开发过程当中,咱们不免有些逻辑的执行是和UI的生命周期相结合的,须要在特定的生命周期中执行相应的方法,咱们平时作的可能就是在View中的每一个周期调用Present中获取数据的方法,而后在调用View的回调接口更新UI,但如今使用Lifecycles可使用注解和观察的模式自动调用Observe中定义好的方法。架构
咱们看个简单的例子,咱们须要在每一个周期Toast周期的名字,那咱们就要在每一个周期方法中调用:框架
override fun onResume() {
super.onResume()
toast("onResume")
}
override fun onPause() {
super.onPause()
toast("onPause")
}
override fun onDestroy() {
super.onDestroy()
toast("onDestroy")
}复制代码
上述状况属于直接调用生命周期方法,当须要调用其余类中的方法而且须要回调时,此时可能会想到使用接口实现,在相应的生命周期中调用方法,在处理完数据后使用接口回调数据:ide
class MyLocationListener {
public MyLocationListener(Context context, Callback callback) {
// ...
}
void start() {
// connect to system location service
}
void stop() {
// disconnect from system location service
}
}复制代码
二、调用类中的方法并设置回调post
class MyActivity : AppCompatActivity {
var myLocationListener :MyLocationListener
override fun onCreate(...) {
myLocationListener = new MyLocationListener(this, location -> {
});
}
@Override
override fun onStart() {
super.onStart();
Util.checkUserStatus(result -> {
if (result) {
myLocationListener.start();
}
});
}
@Override
override fun onStop() {
super.onStop();
myLocationListener.stop();
}
}复制代码
上述是咱们平时开发最经常使用的接口方法,这样作虽然也很方便,但这种模式致使代码的高度耦合,而且一般咱们但愿实现重量更轻的代码,这些代码更易于维护,下面咱们来看看LifeCycles的使用。学习
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"复制代码
class MyObserver(var lifecycle: Lifecycle, var callback: CallBack) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public fun connectOnCreate() {
p("connectOnCreate")
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public fun connectOnResume() {
p("connectOnResume")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public fun disConnectOnDestroy() {
p("disConnectOnDestroy")
}
fun p(string: String) {
callback.update(string)
}
}复制代码
建立Activity并实现LifecyclesOwner,重写方法:测试
class LifeCyclerActivity : AppCompatActivity(), LifecycleOwner {
}复制代码
lateinit var lifecycleRegistry: LifecycleRegistry
lifecycleRegistry = LifecycleRegistry(this)
override fun getLifecycle(): Lifecycle {
return lifecycleRegistry
}复制代码
var myObserver = MyObserver(lifecycle, object : CallBack {
override fun update(string: String) {
Toast.makeText(this@LifeCyclerActivity, string, Toast.LENGTH_SHORT).show()
}
})
lifecycle.addObserver(myObserver)复制代码
在OnCreate中配置onCreate的标记
lifecycleRegistry.markState(Lifecycle.State.CREATED)复制代码
添加其余生命周期回调
override fun onResume() {
super.onResume()
lifecycleRegistry.markState(Lifecycle.State.RESUMED)
}
override fun onDestroy() {
super.onDestroy()
lifecycleRegistry.markState(Lifecycle.State.DESTROYED)
}复制代码
若是你点击到SupportActivity中查看的话,会发现SupportActivity自己就实现了LifecycleOwner,LifecyclerActivity中的不少操做都已经在SupportActivity中完成了,那么上述的使用能够直接更简化为:
class LifeCyclerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_life_cycler)
var myObserver = MyObserver(lifecycle, object : CallBack {
override fun update() {
Toast.makeText(this@LifeCyclerActivity, "Toast", Toast.LENGTH_SHORT).show()
}
})
lifecycle.addObserver(myObserver)
}
}复制代码