Android 中不同的 activity 中实现共用一个 ViewModel

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的监听,然后编写监听触发逻辑。

在此场景实现,我还有个想法(待验证):由于 activity 的运行中,loop是一直在循环的,尝试在activity_B 中获取到 activity_A 中的 looper 对应的 MessageQueen 对象,然后在activityB中向获取到的消息队列中发送消息,由 looper 实现监听回调。(后期更新是否可行)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容