我看到的唯一方法是使用 static 变量
,但这不行,因为我想保留启动多个 Activites
的能力。
在我的例子中,我想保留对 Dagger 2 组件
的引用。
它将提供像 Navigator
这样的对象。我不能只将它存储到 Bundle
中。
目前,我不能使用 Retain MainFragment
而不是 MainActivity
因为这个 bug .(我在 23 API 级别)
是否有 Retain Activity 实现?
最佳答案
嗯,你在 android 中有两个内置的解决方案来解决这个问题:
1) 如果对象是可序列化或可打包的,您可以覆盖 onSaveInstanceState() 并在 onCreate 中读出值。这是 google developer docs有关详细信息。
2) 如果您的对象不可序列化,您可以改写 onRetainNonConfigurationInstance() 并返回该对象。然后您可以在 onCreate 中取回该对象。看这个SO post了解如何使用这种方法(不要坚持你的 Activity !坚持对象。)。这样做的缺点是您一次只能保留一个对象。
我对这两种方法和第三种方法进行了更深入的介绍,您可以使用它。它依赖于 onRetainNonConfigurationInstance 并允许您使用注释来声明应保留 Activity 中的哪些变量。 check it out here .也就是说,除非您有多个不可序列化/可打包的对象要持久保存,否则我不建议您使用它。
编辑:澄清了一点,即您不应该使用 onRetainNonConfigurationInstance() 保留整个 Activity 。
关于android - 通过屏幕方向更改在 Activity 中保留对象引用的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38107111/