安卓 - Fragment生命周期问题
今天写一个安卓程序,发现一个切屏回来就闪退的问题,经过跟踪发现是因为切屏回来
这个第49行代码报错导致的,说的是_binding
是null
这?不对吧,
我一进来使用binding
的话,我就会初始化啊,
再往上一层,发现是这里调用获取了binding
?嗯?我的binding
消失了?
binding置空是在另外一个地方onDestroyView
里面哎?
Fragment生命周期
看这个图,按理说onSaveInstanceState
在onDestroyView
之前,为什么我的binding
没了呢?
错误原因
从MainFragment切换到SubFragment导致触发MainFragment的销毁
然后从SubFragment界面切换到后台,再切回来触发MainFragment的
onSaveInstanceState
(此时binding
为空),故出现异常
修复方法就是加一层非null判断
替代解决办法
看来答案就在如何处理fragments上,即使fragment没有View,但 Activity 状态的变化仍会触发 onSavedInstanceState()
,所以我们可能会遇到调用 onSavedInstanceState()
的时候没有View(binding)的情况。这似乎是有意为之,因为无论是否有View,fragments都会触发这些回调监听?
建议使用view API 来保存和恢复状态(或 SavedStateRegistery)。