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

Android 通过更改屏幕方向在活动中保持对象引用的最佳方法,android,screen-orientation,dagger-2,Android,Screen Orientation,Dagger 2,我看到的唯一方法是使用一个静态变量,但这不好,因为我想保持启动多个活动的能力 在我的例子中,我想保留一个匕首2组件的引用。 它将提供像导航器这样的对象。我不能只把它存储到包中 目前,我无法使用retainmainfragment而不是MainActivity,因为这一点。(我处于23 API级别) 是否有任何Retain Activity实现?嗯,您在android中有两个内置解决方案来解决此问题: 1) 如果对象可序列化或可包裹,则可以重写onSaveInstanceState(),并在onC

我看到的唯一方法是使用一个
静态变量
,但这不好,因为我想保持启动多个
活动的能力

在我的例子中,我想保留一个
匕首2组件的引用。
它将提供像
导航器
这样的对象。我不能只把它存储到
包中

目前,我无法使用
retainmainfragment
而不是
MainActivity
,因为这一点。(我处于23 API级别)
是否有任何Retain Activity实现?

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

1) 如果对象可序列化或可包裹,则可以重写onSaveInstanceState(),并在onCreate中读取值。以下是有关这方面的详细信息

2) 如果对象不可序列化,则可以替代OnRetainOnConfiguration Instance()并返回该对象。然后可以在onCreate中重新获取对象。看看这篇文章,了解如何使用这种方法(不过不要持久化您的活动!持久化对象)。这样做的缺点是一次只能保存一个对象

我对这两种方法进行了更深入的总结,第三种是可以使用的声明性方法。它依赖于OnRetainOnConfigurationInstance,并允许您使用注释来声明活动中应持久化的变量。也就是说,除非您有多个非序列化/可打包对象要持久化,否则我不建议使用此方法


编辑:阐明了一点,即您不应该使用OnRetainonConfiguration Instance()来持久化您的整个活动。

然后将您的对象存储在custom
android.app.Application
@pskink中。我已经保留了Dagger 2的
ApplicationComponent
在那里:)现在我需要一个位置来保存Dagger 2的
MainActivityComponent
<代码>应用程序组件
取决于应用程序上下文<代码>主活动组件>代码>依赖于代码> SputsFractMaungMeor()/代码> ETC.也许你想考虑使用加载器?它们在某种程度上更独立于活动生命周期,并且可以保留state@DavidMedenjak加载程序看起来像是一个处理数据而不是存储数据的解决方案。
onretaingstomnonconfigurationinstance
就是我要找的东西。你的文章也很有帮助。谢谢:)