Android commitAllowingStateLoss 与 commit() 切换fragment 区别

commit()commitAllowingStateLoss()是在Android的FragmentManager中用来提交FragmentTransaction的两种方法。它们的主要区别在于处理“状态丢失”(state loss)的方式。

  1. commit(): 这个方法在提交一个事务时,如果状态已经被保存(即Activity的onSaveInstanceState()方法已经被调用),那么它就会抛出一个异常。这是因为FragmentManager会在状态保存后保存事务的回退栈,所以如果在状态保存后提交一个事务,那么这个事务就不会被保存在回退栈中。这可能会导致应用在恢复状态时出现不一致的状态。

  2. commitAllowingStateLoss(): 这个方法允许在状态已经被保存后提交事务,即使这可能会导致状态丢失。它不会抛出状态丢失的异常,但如果在状态保存后提交事务,那么这个事务就不会被保存在回退栈中,可能会导致应用在恢复状态时出现不一致的状态。

通常来说,你应该尽量避免在状态已经保存后提交事务,因为这可能会导致应用的用户界面状态与实际的应用状态不一致。但在某些情况下,你可能需要使用commitAllowingStateLoss(),例如,当你的应用可以容忍在某些情况下丢失用户界面状态的情况。

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/130863398
今日推荐