FragmentTransaction中commitAllowingStateLoss和commit的区别
时间: 2024-03-19 11:41:19 浏览: 82
关于Fragment重叠问题分析和解决
4星 · 用户满意度95%
在使用 FragmentTransaction 进行 Fragment 切换时,我们需要调用 commit() 方法来提交切换操作。但是在某些情况下,可能会出现 Activity 已经被销毁,但是 FragmentTransaction 还未执行完毕的情况,这时候如果再次调用 commit() 方法,就会抛出 IllegalStateException 异常。为了解决这个问题,Android 提供了两个方法:commit() 和 commitAllowingStateLoss()。
它们的主要区别如下:
1. commit() 方法调用时会执行 FragmentTransaction 的同步操作,如果 Activity 已经被销毁,就会抛出 IllegalStateException 异常,而 commitAllowingStateLoss() 方法则会忽略这个异常,不会抛出错误。因此,在可能出现 Activity 生命周期不稳定的情况下,建议使用 commitAllowingStateLoss() 方法。
2. commit() 方法会将 FragmentTransaction 添加到 Activity 的任务队列中,等待 Activity 执行完毕后再去执行,而 commitAllowingStateLoss() 方法会立即执行 FragmentTransaction,不会等待 Activity 执行完毕。
因此,在使用 FragmentTransaction 进行 Fragment 切换时,如果你确定当前 Activity 生命周期稳定,可以使用 commit() 方法。如果你无法确定当前 Activity 生命周期稳定,建议使用 commitAllowingStateLoss() 方法。
阅读全文