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

标签 android screen-orientation dagger-2

我看到的唯一方法是使用 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/

相关文章:

java - println 需要一条消息 - onActivityResult

libgdx - Google Play 游戏服务和 LibGDX,如何在不显示标题栏的情况下进行集成?

android - 房间+ Dagger 2. NPE

android - Dagger 2 瞄准镜说明

android - Dagger 2.11 注入(inject)不适用于 fragment

android - 在 Android 4.0.3 的 Canvas 上绘制奇怪的崩溃。 A/libc : Fatal signal 11 (SIGSEGV)

android - 如何将 mySQL 文件导入我的 Android 程序?

android recyclerview notifyItemInserted动画

uinavigationcontroller - shouldAutorotate 不适用于导航 Controller swift 2

ios - Swift 手动旋转 View Controller