Android活动之间的数据共享

时间:2012-10-26 00:36:36

标签: android

我有一个问题一直困扰着我一段时间。我想知道什么被认为是从一个活动到另一个活动的数据的规范或最佳实践。我个人意识到有两种方法可以做到这一点。第一种方法是通过putExtra()函数(或类似的东西)将数据直接捆绑到Intent中。但是,这种方式在我看来有点违反了封装原则。我这样做的第二种方法是将数据放入一个单独的类中,并在两个活动之间共享该类。这似乎更基本合理,但我仍然不确定。有人想关注这个吗?

3 个答案:

答案 0 :(得分:2)

我在审核我的应用程序时遇到了同样的问题,最后我创建了我的CustomApplication类,它扩展了Application类并将其添加到我的AndroidManifest.xml中的标记中。这样我就可以使用适当的getter和setter在其中存储任何类型的数据。调用(CustomApplication).getApplicationContext()将返回CustomApplication对象,该对象对于整个应用程序是唯一的,并且存在于单个实例(单例)中,您可以使用它来设置和获取必要的值。

好处是,只要应用程序的任何部分(活动,服务等)正在运行,您的Application对象及其中的数据就会存在。

答案 1 :(得分:1)

有多种方法可以在Activities之间共享数据。

  1. 如果数据是预定义的数据类型,例如intdoublestring ...只需将其直接放到Intent

  2. 如果数据是二进制格式或类似对象,则将该类实现到Parcelable接口,然后放到Intent发送。

  3. 如果数据很轻或很小,你会喜欢上面的1,2;但是,如果它足以影响性能或质量,那么我认为你需要一个数据存储。这就像在一些地方保存数据:像文件,xml,数据库......以及从中读/写。

答案 2 :(得分:1)

虽然您可以将任何类实现到Parcelable接口中以跨活动提供它们,但这种方式将创建对象的新副本并违反一致性。

Android采用模型 - 视图 - 控制器(MVC)设计。活动是控制器,我认为它们不应该自己保存数据,也不应该直接提供数据。更好的做法是,一个Activity告诉下一个Activity数据的位置,下一个Activity从Model本身获取数据。

也许你可以使用Provider。活动A将数据的uri置于意图中并发送意图以启动活动B,然后活动B从当时获取数据的uri并使用它来实现来自提供者的数据