viewModelProvider 所有者的建议?
viewModelProvider owner advice?
对我来说,关于 ViewModelProvider 的信息缺少一些细节,我像往常一样转向 Whosebug 来纠正问号。
特别是,我有一个 activity 由几个片段组成,所有片段都以不同的方式呈现相同的数据。在实例化 ViewModelProvider 时使用 activity 作为所有者与使用片段有什么优缺点?
myViewModel = ViewModelProvider(owner).get(MyViewModel::class.java)
首先,ViewModel class 是生命周期感知的。这意味着您定义的 ViewModel class 将根据 activity/fragment 的生命周期进行管理。
和Observers一样,都是以lifecycleOwner为参数。这意味着观察者将一直活着 fragment/activity 活着。如果它进入了OnStop,你不必手动停止观察,因为它的lifecyleOwner是activity/fragment。
其次,对于使用 activity 作为片段上的生命周期所有者的区别,ViewModel 实例将保持活动而不是在片段内定义它。由于 Activity 保存片段。一个片段可以进入 onDetach(),所以我们保证片段中的这个 ViewModel 实例被杀死。但是如果我们把它定义在一个activity之内,activity的生命周期会更长一些。
第三,我认为因为你的情况是相同的数据,只是片段中的视图变化,我建议使用SharedViewModel,查看this article了解更多详情.
希望一切都清楚。
编码愉快
对我来说,关于 ViewModelProvider 的信息缺少一些细节,我像往常一样转向 Whosebug 来纠正问号。
特别是,我有一个 activity 由几个片段组成,所有片段都以不同的方式呈现相同的数据。在实例化 ViewModelProvider 时使用 activity 作为所有者与使用片段有什么优缺点?
myViewModel = ViewModelProvider(owner).get(MyViewModel::class.java)
首先,ViewModel class 是生命周期感知的。这意味着您定义的 ViewModel class 将根据 activity/fragment 的生命周期进行管理。
和Observers一样,都是以lifecycleOwner为参数。这意味着观察者将一直活着 fragment/activity 活着。如果它进入了OnStop,你不必手动停止观察,因为它的lifecyleOwner是activity/fragment。
其次,对于使用 activity 作为片段上的生命周期所有者的区别,ViewModel 实例将保持活动而不是在片段内定义它。由于 Activity 保存片段。一个片段可以进入 onDetach(),所以我们保证片段中的这个 ViewModel 实例被杀死。但是如果我们把它定义在一个activity之内,activity的生命周期会更长一些。
第三,我认为因为你的情况是相同的数据,只是片段中的视图变化,我建议使用SharedViewModel,查看this article了解更多详情.
希望一切都清楚。
编码愉快