我正在使用数据绑定,已经声明了一个lateinit var
用于绑定,当我切换到不同的片段时,Leaky canary显示泄漏。
片段
class HomeFragment : BottomNavViewHostBaseFragment() {
private lateinit var viewModel: HomeViewModel
private lateinit var binding: FragmentHomeBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel
return binding.root
}
...
}
这是来自Leaky Carny的信息。
androidx.constraintlayout.widget.ConstraintLayout has leaked:
Toast$TN.mNextView
↳ LinearLayout.mContext
↳ MainActivity.navigationView
↳ NavigationView.listener
↳ BaseFragment$setNavigationDrawerItemSelectedListener$1.this$0 (anonymous implementation of com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener) ↳ OrdersHostFragment.mFragmentManager
↳ FragmentManagerImpl.mActive
↳ HashMap.table
↳ array HashMap$HashMapEntry[].[0]
↳ HashMap$HashMapEntry.value
↳ HomeFragment.!(binding)!
↳ FragmentHomeBindingImpl.!(mboundView0)!
↳ ConstraintLayout
我该如何解决这个问题?我需要在onDestroyView
中执行binding=null
吗?但是如果我需要这样做,那么binding.lifecycleOwner=viewLifecycleOwner
还有什么意义呢?
onCreateView
的局部变量使用。 - Agent_LonCreateView
之外访问多个“视图”以执行操作,例如按钮的“可见性”等。 - OhhhThatVarunView
。 - Agent_LViewModel
和Binding Adapters
进行所有操作的吗? - OhhhThatVarunFragment
/Activity
中不再有代码了。 - Agent_L