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

Best way to keep object reference in Activity through screen orientation changes

我看到的唯一方法是使用 static variable,但这样不行,因为我想保留启动多个 Activites 的能力。

就我而言,我想保留 Dagger 2 Component 的引用。 它将提供像 Navigator 这样的对象。我不能只将它存储到 Bundle.

目前,我不能用Retain MainFragment代替MainActivity因为这个bug。(我在23 API级别) 是否有 Retain Activity 实现?

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

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

2) 如果您的对象不可序列化,您可以改写 onRetainNonConfigurationInstance() 和 return 该对象。然后您可以在 onCreate 中取回该对象。查看此 SO post 以了解如何使用此方法(但不要保留 activity!保留对象。)。这样做的缺点是一次只能持久化一个对象。

我对这两种方法和第三种方法进行了更深入的介绍,您可以使用它。它依赖于 onRetainNonConfigurationInstance 并允许您使用注释来声明 activity 中的哪些变量应该被保留。 check it out here。也就是说,除非您有多个 non-serializeable/parcelable 对象要持久化,否则我不建议您使用它。

编辑:澄清一点,您不应该使用 onRetainNonConfigurationInstance() 保留整个 activity。