实际接触和使用MVVM体系结构时,所有人都不好。 因为我个人认为,MVVM相对于MVC、MVP学习难度较大,设计知识点一点也不多。 所以我想慢慢记录自己的成长。 如果有错误的话希望你指出来。
还是那个图AAC (Androidarchitecturecomponents )。
本文介绍生命周期。 在了解和理解生命周期之后,最终将其运用到MVVM的项目中吧。 本文是自己的总结。 如果有错误的话,请指出来
一、生命周期介绍及简要认识
介绍:感知生命周期的组件
角色—监视生命周期组件(如Activity/Fragment )在生命周期发生变化时可以及时通知其他组件
其中包括生命周期所有者和生命周期观察器。 这样,实现生命周期所有者的是被观察者,可以看到源代码(returnsthelifecycleoftheprovider、生命周期的提供者,可以认为在很长时间内是被观察者)
请考虑,即使没有LiveData组件,只要活动的生命周期在onStart和onResume中,LiveData处于活动状态,更新的数据就会通知相应的活动
、生命周期为onStop或onPause时,不回调数据更新;生命周期为onResume时,立即回调数据。 如果没有LiveData,就必须在代码和活动中写很多判断来实现这个功能,而现在Lifecycles已经实现了这个功能。 我们只是在用。 看看我之前说的LiveData、LiveData监听更改的代码:
@Override
protectedvoidoncreate (@ nullablebundlesavedinstancestate )。
super.oncreate (savedinstancestate;
//this这里的类型是生命周期所有者,
livedata.observe(this,new Observer ) )。
//这里,当被观察者的生命周期所有者的生命周期发生变化时,通知观察者liveData调用onChanged。
@Override
公共语音更改(字符串) {
}
);
}
复制代码
为什么在这里可以直接使用this呢? 正如前面所述,从26个版本开始,Support库在AppCompatActivity和SupportActivity中都实现了生命周期所有者,并且在内部已经处理了UI接口的生命周期我们可以直接放入代码,如下所示
如果此处尚不清楚,请自行实现生命周期所有者和生命周期观察器。 (如果知道谷歌的组件,内部已经在处理了。 )
二、自己实现生命周期业主(被观察者生命周期)
我们创建Actvity并继承Activity类。 请注意,没有实现生命周期所有者。
自己实现生命周期所有者,提供被观察者的生命周期
新建LiveData,实现LiveData的数据变更监听。
onstop时,给livedata post个数据
活动包括:
publicclasslifecyclesactivityextendsactivityimplementslifecycleowner {
私密性mutablelivedatalivedata=newmutablelivedata (;
privatelifecycleregistrymlifecycleregistry=newlifecycleregistry (this;
@Override
protectedvoidoncreate (@ nullablebundlesavedinstancestate )。
super.oncreate (savedinstancestate;
setcontentview (r.layout.activity _ life cycles );
livedata.observe(this,new Observer ) )。
@Override
公共语音更改(字符串) {
观察logutils.I(livedata ),(=) s );
}
);
}
@Override
protectedvoidonsaveinstancestate (@ nonnullbundleoutstate )。
mlifecycleregistry.markstate (life cycle.state.created;
super.onsaveinstancestate;
}
@NonNull
@Override
公共生命周期获取生命周期(
返回生命周期注册表;
}
@Override
protected void onStop
super.onStop (;
liveData.postValue (“尝试运行”);
}
}
复制代码
运行后查看打印,按home键退出,点击返回。 我们以前的LiveData的效果也一样。 离开接口的时候不打印。 回到界面的时候马上打印。
三、自己实现生命周期观察器
我们自己创建新的MyObserver,并拦截所有生命周期
publicclassmyobserverimplementslifecycleobserver {
@ onlifecycleevent (life cycle.event.on _ create ) )。
公共语音开启
log utils.I (我的观察器)、) onCreate );
}
@ onlifecycleevent (life cycle.event.on _ start )。
公共语音启动
log utils.I (我的观察器)、) onStart );
}
@ onlifecycleevent (life cycle.event.on _ resume ) )。
公共语音oid on resume
logutils.I(myobserver ),) onResume );
}
@ onlifecycleevent (life cycle.event.on _ pause )。
public void onPause (
logutils.I(myobserver ),) onPause );
}
@ onlifecycleevent (life cycle.event.on _ stop )。
公共语音开启(
log utils.I (我的观察器),) onStop );
}
@ onlifecycleevent (life cycle.event.on _ destroy )。
public void onDestory
logutils.I(myobserver ),) onDestory );
}
//@ onlifecycleevent (life cycle.event.on _ any ) ) ) ) )。
//public void onAny ()
//log utils.I (我的观察器)、) onAny );
//}
}
复制代码
然后除了Activtiy
@Override
protectedvoidoncreate (@ nullablebundlesavedinstancestate )。
super.oncreate (savedinstancestate;
setcontentview (r.layout.activity _ life cycles );
获取生命周期().addobserver ) (newmyobserver ) );
}
复制代码
运行后,看打印,这里不贴效果。 当我们在项目中使用生命周期时,这些都不是我们需要考虑的。 这里简单地告诉大家生命周期是什么意思。 谷歌把我们要处理的东西封装在这些组件中。
到此为止,我大致了解了生命周期。 加油啊