我需要手动清除ViewModel中的侦听器变量以避免内存泄漏吗?

如果我通过这样的方式设置了片段和视图模型,并从片段中设置了一个动作变量,因此有隐式引用,则视图模型死后会自动清除该引用,并打破潜在的引用周期,或者我应该在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
...
huanghongwang123 回答:我需要手动清除ViewModel中的侦听器变量以避免内存泄漏吗?

您不应在ViewModel中执行任何与UI相关的操作。您的ViewModel应该通过Fragment/Activity将数据提供给您的Observer。我假设您想在加载数据之前显示一些指示器,然后再隐藏它。因此,在加载数据之前立即显示指标,然后将其隐藏在onChange的{​​{1}}中:

Observer
本文链接:https://www.f2er.com/3049060.html

大家都在问