livedata是可观察数据存储器类,与常规可观察数据存储类不同,livedata具有对系统组件(如:activity、fragment、service等)的生命周期感知能力。
livedata只有在生命周期的活跃状态下才会更新数据,即start、resume,非活跃状态pause、stop是不会更新数据的。如下所示:
livedata只有在活跃状态下才会通知更新数据,也就是start和resume生命周期状态下,当组件进入onpause或者onstop生命周期状态下,当前组件非活跃状态下不会通知更新数据,在非活跃状态下有viewmodel有数据更新,在组件状态从onpause或者onstop非活跃状态进入活跃状态onstart或者onresume下,会通知组件数据更新。
不需要手动控制生命周期。
不会因为activity的停止,导致app崩溃。
数据状态始终保持最新。
不会产生内存泄漏。
三、livedata api
非ui线程使用postvalue()方法。
ui线程使用setvalue()方法。
rviewmodel类:
mainactivity类: