通过屏幕方向更改在Activity中保持对象引用的最佳方法

时间:2016-06-29 18:08:40

标签: android screen-orientation dagger-2

我看到的唯一方法是使用static variable,但这并不好,因为我希望能够启动多个Activites

在我的情况下,我想保留Dagger 2 Component的引用。 它将提供Navigator之类的对象。我不能将它存储到Bundle

目前,由于此bug,我无法使用Retain MainFragment代替MainActivity。(我处于23 API级别) 是否有任何保留活动实施?

1 个答案:

答案 0 :(得分:1)

嗯,你在android中有两个内置解决方案来解决这个问题:

1)如果对象是可序列化的或可分区的,则可以覆盖onSaveInstanceState()并在onCreate中读取值。以下是google developer docs的详细信息。

2)如果您的对象不可序列化,您可以改写onRetainNonConfigurationInstance()并返回该对象。然后,您可以在onCreate中重新获取对象。请看这个SO post如何使用这种方法(不要坚持你的活动!坚持对象。)。这样做的缺点是您一次只能持久保存一个对象。

我有更深入地介绍这两种方法,第三种是声明式方法,你可以滚动。它依赖onRetainNonConfigurationInstance并允许您使用注释来声明活动中应该保留哪些变量。 check it out here。也就是说,除非你有多个不可序列化/可分割的对象要坚持,否则我不建议使用它。

编辑:澄清一点,你不应该使用onRetainNonConfigurationInstance()来保持你的整个活动。

相关问题