Android在bundle中传递持久性信息还是使用singleton模式?

时间:2012-09-16 17:45:17

标签: android android-activity singleton android-lifecycle android-bundle

想知道在活动之间传递信息,将其添加到捆绑包或使用单例类来存储和访问此数据是一种更好的做法。我过去曾经使用过两个android方面的项目,但我现在正在开发一个规模大得多的android项目,所以我宁愿在开始时做正确的事情。

我的应用程序对用户进行身份验证,然后必须根据其ID进行各种查询。为了最大限度地减少活动之间的耦合,我认为只需将id添加到bundle中,然后让每个活动查询它所需的信息,这将是最好的选择;然而,为了提高响应能力,我倾向于使用单例类来存储持久性信息,从而防止了超出需要的查询。

5 个答案:

答案 0 :(得分:7)

就个人而言,我会创建Application的扩展名来存储您的应用的状态,并在不同的活动之间共享数据。 Application充当整个应用的上下文,Android保证您的应用中始终只有一个实例。因此它类似于定义自己的Singleton,但使用Application将允许Android控制共享数据的生命周期,并基本上为您执行内存管理。

Here are some more details。如果沿着这条路走下去,你可以简单地将任何getter / setter(或其他)方法添加到应用程序扩展中,以存储/检索数据并对其进行操作。特别是当使用Bundle在活动之间来回传递时,后者管理(并保持一致)会变得非常痛苦。如果仅在活动流中的一个或两个地方需要数据时才使用Bundle,那么不需要在其上运行任何(复杂)操作。

答案 1 :(得分:1)

我唯一一次通过bunlde在Activities之间传递数据是因为我赢得了一段时间不需要访问的东西(即我想在一段时间内只使用一次的资源的resID)呼叫活动等)。我还认为响应性的差异非常小,因此不应该引起关注。我建议使用单身方法

答案 2 :(得分:1)

更好的方法是使用SharedPreferences来保持userId,您需要保留和重用。当然你可以使用单例方法甚至是Application类,但是应用程序被杀死后数据会丢失。

答案 3 :(得分:0)

传递捆绑包是一项繁琐的工作。您必须为活动中的每个更改传递一个包,以确保该值不会丢失,即使您没有使用被调用活动中的值。

答案 4 :(得分:0)

单身模式有一些不好的结果。例如:从主要活动中调用辅助活动。电话中断了你的工作。结束电话后,Android正试图将次要活动带到屏幕上。这是我的噩梦 - 许多用户抱怨异常 - 谷歌在我的单身人士中向我报告了NULL指针。所以你不仅要提供单例,而且单例内的所有数据也必须是单例。这个问题非常复杂:(