Android 中不同的 activity 中实现共用一个 ViewModel
在实际开发过程中,一个activity_A会根据另一个activity_B的改变而做出相应的变化,联想到利用viewmodel+livedata天生具有监听功能实现,在viewmodel中存放一个livedata变量,在需要改变的activity中添加对livedata的监听,实现上述想法。
在 activity_B 中创建一个静态变量来存放 activity_B 的 viewmodelStoreOwner对象
companion object{
var mActivity_B : ViewModelStoreOwner? = null
}
在其onCreate回调中给这个静态变量赋值
override fun onCreate() {
mActivity_B = this //此处 activity_B 实现了ViewModelStoreOwner接口,直接赋值this就行
}
特别重要一点,由于此处的静态变量持有“this”这个activity_B对象,会导致activity无法被回收,造成内存泄漏,在activity 的 onDestroy() 的回调中将静态变量释放
override fun onDestroy() {
super.onDestroy()
mActivity_B = null
}
在 activity_A 中获取到同一个ViewModel,然后利用监听,获取viewmodel实现:
private val shareViewModel : ShareViewModel by lazy {
ViewModelProvider(Activity_B.mActivity_B?:this).get(ShareViewModel::class.java)
}
此后再在 activity_A 中创建livedata的监听,然后编写监听触发逻辑。