我想保存片段状态,在全部参考之后,我遇到了两种方法,
在片段的onCreate()方法中使用setRetainInstance(true)保留片段的状态 并重写Fragment的onSaveInstanceState(Bundle outState)方法。
我尝试过使用两者,两者都为我工作。 我在徘徊,是否有任何具体的用例,什么时候使用它们?
答案 0 :(得分:0)
不同之处在于保留数据的保留时间。 setRetainInstance(true)对于在发生配置更改(如旋转)的过程中保留数据非常有用。
如果在用户导航到另一个应用程序(或主屏幕等)时需要保留数据,那么您应该覆盖setRetainInstance(因为Android 可以回收您的Activity的内存。)
答案 1 :(得分:0)
重写Fragment.onSaveInstanceState(...)和 保留片段是保留数据的持续时间。如果它需要持续足够长的时间来维持配置更改,那么保留片段的工作要少得多。
在保留对象时尤其如此,您不必担心对象是否实现了Serializable。
但是,如果您需要更长时间的数据,保留片段无济于事。如果在用户离开一段时间后销毁活动以回收内存,则任何保留的片段都会被销毁,就像它们不被保留一样。
对于具有较小的测验问题列表的应用,让用户重新开始可能是一个可接受的选择。 但如果测验有100个问题,那么用户在返回应用程序时会非常恼火,并且必须在第一个问题上重新开始。您需要片段的状态才能在活动记录的生命周期中存活。要实现这一点,您将使用onSaveInstanceState(...)。
希望这澄清。