1、什么是 Android DataBinding
DataBinding是谷歌官方发布的一个数据绑定的框架,是MVVM模式在Android上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰。MVVM相对于MVP,其实就是将Presenter层替换层了ViewModel层。DataBinding能够省去我们一直以来的findViewById()步骤,大量减少Activity内的代码,数据能够单向或双向绑定到layout文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常。
弊端:需要修改布局文件,布局文件代码变多,变复杂。
2、什么是Lifecycle
Google官方推出的Android Jetpack中的一个基于观察者模式实现的架构组件,用于管理Activity和Fragment的生命周期。让业务组件能够自动感知Activity和Fragment的生命周期。
使用方法:
class MainActivity : AppCompatActivity() {
private val myLifecycle = MyLifecycle()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(myLifecycle)
}
override fun onDestroy() {
super.onDestroy()
lifecycle.removeObserver(myLifecycle)
}
}
class MyLifecycle : LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(@NonNull owner: LifecycleOwner){
Log.i("MyLifecycle", "onCreate() ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart(@NonNull owner: LifecycleOwner){
Log.i("MyLifecycle", "onStart() ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume(@NonNull owner: LifecycleOwner){
Log.i("MyLifecycle", "onResume() ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause(@NonNull owner: LifecycleOwner){
Log.i("MyLifecycle", "onPause() ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop(@NonNull owner: LifecycleOwner){
Log.i("MyLifecycle", "onStop() ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy(@NonNull owner: LifecycleOwner){
Log.i("MyLifecycle", "onDestroy() ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
fun onLifecycleChanged(@NonNull owner: LifecycleOwner, @NonNull event: Lifecycle.Event){
Log.i("MyLifecycle", "onLifecycleChanged: Event = $event")
}
}
原理解析(以AppCompatActivity为例):
继承关系:AppCompatActivity -》 FragmentActivity -》ComponentActivity -》LifecycleOwner
public class FragmentActivity implements LifecycleOwner{
final LifecycleRegistry mFragmentLifecycleRegistry = new LifecycleRegistry(this);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
...