我正在重写现在使用一个Activity的应用程序的一部分。在该Activity中有一个导航抽屉,它指向不同的片段,每个片段包含几个通过ViewPager显示的嵌套片段。
以前为了保持活动之间需要访问的变量,我会使用Singleton。现在我的片段不再需要了,因为我可以使用getActivity()来访问将在所有这些片段之间共享的变量。
但是,当Activity暂停时,我需要再次将这些变量存储在Singleton中,以便在恢复活动时重新初始化它们。
因此,如果应用程序确实需要Singleton才能正常工作,那么我的Fragments通过Activity访问变量会更好吗,还是我可以使用Singleton来获取/更新共享变量?
答案 0 :(得分:0)
Singleton是design pattern,它承诺系统中每个人都要访问的对象的一个实例,但它没有定义系统,即使在大多数实现中系统都是应用程序,也没有必要必须那样。
我建议使用Activity。它有saveInstantState
和resumeInstanteState
作为其生命周期的一部分。它优于Application singleton,因为它将数据保存在磁盘上,如果你的进程被杀死(例如内存不足),下次用户在你的应用程序中休息时,它仍然能够恢复状态。
答案 1 :(得分:0)
我可以使用getActivity()来访问将在所有这些片段之间共享的变量。
如果您想创建符合推荐设计的Fragments
,请不要这样做。
Fragment
应该是自包含且可重复使用的 - 它应该从不知道它所附加的Activity
类型。
相反,你应该定义一个'回调'每个片段上的接口,让您的Activity
实现它及其方法。然后,您可以继续使用“单身”'与您的Activity
。