其他分享
首页 > 其他分享> > android – 什么时候提交FragmentTransaction是安全的?

android – 什么时候提交FragmentTransaction是安全的?

作者:互联网

根据docs

A fragment transaction can only be created/committed prior to an
activity saving its state. If you try to commit a transaction after
Activity.onSaveInstanceState() (and prior to a following
Activity.onStart or Activity.onResume(), you will get an error.

我可以理解,在Activity.onSaveInstanceState()之后片段事务无法提交的第一部分,
  因为如果需要恢复活动,则提交后的状态可能会丢失.

但我不明白为什么我们不能在Activity.onStart或Activity.onResume()之前提交片段事务? Oncreate()也在Activity.onStart或Activity.onResume()之前.这是否意味着我们甚至无法在oncreate()中提交它?

解决方法:

这里的关键是,在调用onSaveInstanceState()之后以及之后的onStart()或onResume()之前,您不能提交事务.

您可以在初始onCreate()和后续onStart()或onResume()上提交事务,因为没有状态.

但是,如果Activity正在恢复其状态(即先前调用onSaveInstanceState(),并且Activity正在使用该状态重新创建自身,则无法执行Fragment事务.这是因为如果在Activity恢复之前提交Fragment事务在前一个Fragment状态中,您最终处于不清楚您所处的状态的情况.保存的状态是否优先于您通过提交Fragment事务创建的新状态,或者新事务是否优先于保存州?

检查此方案的最简单方法是检查传递给onCreate()和其他生命周期方法的savedInstanceState包是否为null.如果它为null,则表示没有保存状态,您可以安全地执行事务.如果它不为null,则存在您可能想要保留的已保存状态.

标签:android,android-fragments,fragmenttransaction
来源: https://codeday.me/bug/20190519/1134219.html