在数据绑定上调用setLifecycleOwner时应该传递Fragment实例还是从getViewLifecycleOwner返回的所有者

哪种方法正确:

  1. Fragment实例作为lifecycleowner传递:

    override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View {
        val binding = FragmentEventSettingsBinding.inflate(inflater,container,false)
        binding.lifecycleowner = this
        return binding.root
    }
    
  2. 通过viewLifecycleowner中的Fragment

    override fun onCreateView(inflater: LayoutInflater,false)
        binding.lifecycleowner = viewLifecycleowner
        return binding.root
    }
    
wdh709571286 回答:在数据绑定上调用setLifecycleOwner时应该传递Fragment实例还是从getViewLifecycleOwner返回的所有者

推荐的解决方案是通过支持库28.0.0和AndroidX 1.0.0中添加的getViewLifecycleOwner()或getViewLifecycleOwnerLiveData()使用片段的视图生命周期,以便每次损坏片段的视图时,LiveData都会删除观察者>

参考:5 common mistakes when using Architecture Components

,

第一种方法是正确的。

第二种方法最有效,但是它可能隐式导致您的应用程序崩溃,并且将花费更多的资源。因为Fragment实现了LifecycleOwner,所以当您可以使用this时,您的程序就可以编译。

但是,使用this时,观察者的寿命更长。例如,当执行onDestroyView()而未执行onDestroy()时,您的RecyclerView被销毁,并且您的LiveData也被更改,这将导致您的应用尝试填充空的RecyclerView ,您的应用将崩溃。

在Android Studio中,如果您使用this,则会建议您使用viewLifecycleOwner

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

大家都在问