Can not perform this action after onSaveInstanceState 另一种解决方案

319 阅读1分钟

W/System.err: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
W/System.err:     at androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1610)
W/System.err:     at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1650)
W/System.err:     at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:341)
W/System.err:     at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:306)

一些常规的解决方案# IllegalStateException Can not perform this action after onSaveInstanceState 解决方案

事实上我们应该尽量避免在Activity状态丢失后(在后台时)调用 Fragment的commit方法,那有什么可以让我们知道Activity的状态呢? 事实上 LiveData已经有了状态感知的功能,所以只要将耗时操作放到viewmodel里,完成后更新livedata,在Activity或者Fragment里监听livedata,再执行跳转/打开新fragment的操作,就可以避免出现上面的问题【仅考虑最常见的状况】。