如果我通过这样的方式设置了片段和视图模型,并从片段中设置了一个动作变量,因此有隐式引用,则视图模型死后会自动清除该引用,并打破潜在的引用周期,或者我应该在viewModel.onCleared()
中手动清除它吗?
class MyFragment: BaseFragment() {
lateinit var viewModel: MyViewModel
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
return FragmentMyBinding.inflate(inflater,container,false).also { binding ->
binding.viewModel = ViewModelProviders.of(this).get(MyViewModel::class.java).apply {
viewModel = this
showLoader = {
// code to display loading spinner
}
}
binding.lifecycleowner = viewLifecycleowner
}.root
}
}
...
class MyViewModel: ViewModel() {
lateinit var showLoader: () -> Unit
...