【发布时间】:2021-12-17 23:45:50
【问题描述】:
我有一个使用 View Binding 的 Fragment,因此它将其 _binding 成员变量设置为 onCreateView 并在 onDestroyView 中将其清空。在onViewCreated 中,我使用viewLifecycleOwner 作为LifecycleOwner 从视图模型观察LiveData。 (实际上这是在片段和基类之间划分的,但我看不出这将如何解释)
我无法在内部重现这一点,但 crashlytics 报告了在绑定为 null 时 LiveData 的观察者被回调的字段中的案例,这让我认为它是在调用 onDestroyView 之后以某种方式被调用的。知道这怎么可能吗?
更新:原来观察者在其中一个视图上调用了 postDelayed,因此在调用 onDestroyView 之后正在执行 Runnable(并访问绑定)。
感谢@Zain 和@EpicPandaForce 观看。
【问题讨论】:
-
可能是因为
MyFragmentBase被多个分片扩展;所以每当onDestroyView()被MyFragment调用;你得到了同一个基类的另一个片段;那么这并不意味着观察者是分离的;它仍在工作,因为它与 ViewModel 的生命周期相关联;不是片段。 -
observe(viewLifecycleOwner)不是表示观察者与片段的生命周期相关联吗? -
我需要查看 NPE 的确切异常堆栈跟踪来告诉您出了什么问题。我感觉这是一个进程死亡+片段重新创建的问题,与 LiveData 无关。
-
如果这真的是 LiveData 中的错误,我正在考虑跳转到 Flow + flowWithLifecycle/repeatOnLifecycle,但如果确实是进程死亡,那么也许这也无济于事。跨度>
标签: android android-livedata android-lifecycle android-viewbinding