为什么使用保留片段来通过配置更改来保持状态?
Why use retained fragment for keeping state through configuration changes?
我阅读了很多关于 activity 和片段生命周期、配置更改以及如何在这些方面保持状态的内容。
根据我收集到的信息,似乎 google 官方建议保留片段以保持状态,即使必须保留的数据来自 activity.
我想知道,为什么这种方法比将状态保存在由应用程序集中管理的单例中更好?
据我了解,没有应用程序就不可能有任何片段/activity,那么为什么不使用它呢?
我知道单身人士不喜欢,但在我看来这将是解决问题的好方法,无需创建(和滥用?)不可见的片段来保持状态。
why this approach would be better than e.g keeping the state in a singleton that is managed centrally by the application?
单例适用于应用范围的状态。但是,特定 Activity
子类可能有零个、一个或多个实例,这使得单例方法存在问题。另外,总的来说,我们尽量不使用不必要的单例,因为它们容易导致内存泄漏。
形容词"retained"的原因是保留的片段是基于旧的onRetainNonConfigurationInstance()
,这是一种将任意对象从旧的传递到新的activity的方式] 配置更改。保留的片段有助于围绕 "retained instance" 构造实施更好的编码实践。
实际上,在可能的情况下,您的状态应该进入保存的实例状态 Bundle
,因为这不仅有助于配置更改,而且如果用户 returns 在您的流程之后执行您的任务由于内存不足而被终止。
我阅读了很多关于 activity 和片段生命周期、配置更改以及如何在这些方面保持状态的内容。
根据我收集到的信息,似乎 google 官方建议保留片段以保持状态,即使必须保留的数据来自 activity.
我想知道,为什么这种方法比将状态保存在由应用程序集中管理的单例中更好? 据我了解,没有应用程序就不可能有任何片段/activity,那么为什么不使用它呢?
我知道单身人士不喜欢,但在我看来这将是解决问题的好方法,无需创建(和滥用?)不可见的片段来保持状态。
why this approach would be better than e.g keeping the state in a singleton that is managed centrally by the application?
单例适用于应用范围的状态。但是,特定 Activity
子类可能有零个、一个或多个实例,这使得单例方法存在问题。另外,总的来说,我们尽量不使用不必要的单例,因为它们容易导致内存泄漏。
形容词"retained"的原因是保留的片段是基于旧的onRetainNonConfigurationInstance()
,这是一种将任意对象从旧的传递到新的activity的方式] 配置更改。保留的片段有助于围绕 "retained instance" 构造实施更好的编码实践。
实际上,在可能的情况下,您的状态应该进入保存的实例状态 Bundle
,因为这不仅有助于配置更改,而且如果用户 returns 在您的流程之后执行您的任务由于内存不足而被终止。