比较将数据传递给碎片的方法

时间:2014-07-10 00:05:53

标签: android android-fragments android-lifecycle

我知道一些不同的方法来获取'东西'成为一个片段,但在某些情况下,我并不自信我已经根除了细节中的所有“魔鬼”#39;而且我还没有找到一种方法,我很高兴通过复杂的物体或动态设置它们:

  1. Bundle(serializable / parcelable)
  2. 持久存储,例如分贝/磁盘
  3. Bundle + IBinder
  4. 单身/应用
  5. 塞特斯
  6. 我对权衡的理解如下:

    1. 非常适合发送数据/参数,非常适合发送带有行为的复杂对象,例如连接等。
    2. 非常适合阅读数据并显示“目前的情况”。并且在应用程序生命周期中工作,现在可能很难显示X'类型接口/不可行的复杂行为(错误的术语?)对象
    3. Haven没有尝试过,但听起来像是一种在Bundle中存储对象句柄的方法吗?除了扩展Binder之外,我还不清楚做这项工作需要做些什么。听起来好得令人难以置信,特别是因为我还没有看到它所倡导的。
    4. 除了使用Singleton之外的一般设计问题,这似乎可能是最安全的'片段可以访问复杂对象的方式吗?
    5. 活动&片段生命周期使得这一点变得非常棘手?
    6. (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)真的可以成为保存/恢复复杂对象句柄的灵丹妙药吗?

0 个答案:

没有答案