我知道一些不同的方法来获取'东西'成为一个片段,但在某些情况下,我并不自信我已经根除了细节中的所有“魔鬼”#39;而且我还没有找到一种方法,我很高兴通过复杂的物体或动态设置它们:
我对权衡的理解如下:
(4)和(5)是我头脑中的大事。
我将Singleton / Application列为' safe'的原因是,片段/活动可能会在一瞬间被销毁/重新创建(我已经读过甚至没有setRetainInstance是证明这一点,因为它只处理配置更改),应用程序实例应该在...应用程序的生命周期内持久化。因此,即使Fragment / Activity实例被破坏并重新创建,新实例也将始终寻找之前使用的Singleton资源。
Setters对我来说似乎非常方便,但是如果 - 例如 - 在片段上设置Connection对象后,系统会杀死片段以回收内存(除此之外:系统是否只能对片段执行此操作而不是对活动执行此操作) ?或者他们总是被捆绑在一起),我还没有意识到片段保存其状态的优雅方式' (复杂对象)到一个包并恢复它。随后,AFAIK片段管理器将创建片段的新实例,调用几个生命周期方法,并假装一切都是hunky-dory,没有通过Setter设置任何东西。所以为了解决这个问题,我猜测我会依赖于Activity生命周期恢复来再次调用Setter - 但是问题只是递归,即如果Activity有一个复杂对象的存储实例,它是怎么回事恢复 以便它可以将其恢复为片段?
在一个复杂的项目中,这似乎让我觉得需要过多的移动部件来证明原因的正确性,当我在Y上设置X时,它会被设置为#34;。
所以我的实际问题是:我错过了什么吗?是(4)安全'看起来如何,我对(5)的问题有正确的想法,还是比我描绘的更好/更差?有没有额外的问题'事情可能被杀死或者可能没有得到回调,或者可能得到额外的回调,或者类似的任何奇怪的事情? Can(3)真的可以成为保存/恢复复杂对象句柄的灵丹妙药吗?