通过Singleton和Activity访问变量

时间:2014-07-19 01:21:09

标签: android

我正在重写现在使用一个Activity的应用程序的一部分。在该Activity中有一个导航抽屉,它指向不同的片段,每个片段包含几个通过ViewPager显示的嵌套片段。

以前为了保持活动之间需要访问的变量,我会使用Singleton。现在我的片段不再需要了,因为我可以使用getActivity()来访问将在所有这些片段之间共享的变量。

但是,当Activity暂停时,我需要再次将这些变量存储在Singleton中,以便在恢复活动时重新初始化它们。

因此,如果应用程序确实需要Singleton才能正常工作,那么我的Fragments通过Activity访问变量会更好吗,还是我可以使用Singleton来获取/更新共享变量?

2 个答案:

答案 0 :(得分:0)

Singleton是design pattern,它承诺系统中每个人都要访问的对象的一个​​实例,但它没有定义系统,即使在大多数实现中系统都是应用程序,也没有必要必须那样。

我建议使用Activity。它有saveInstantStateresumeInstanteState作为其生命周期的一部分。它优于Application singleton,因为它将数据保存在磁盘上,如果你的进程被杀死(例如内存不足),下次用户在你的应用程序中休息时,它仍然能够恢复状态。

答案 1 :(得分:0)

  

我可以使用getActivity()来访问将在所有这些片段之间共享的变量。

如果您想创建符合推荐设计的Fragments,请不要这样做。

Fragment应该是自包含且可重复使用的 - 它应该从不知道它所附加的Activity类型。

相反,你应该定义一个'回调'每个片段上的接口,让您的Activity实现它及其方法。然后,您可以继续使用“单身”'与您的Activity