在Android中进行适当的互动沟通?

时间:2012-06-29 17:43:02

标签: android android-activity

我想在单个进程中共享活动之间的多兆字节数据结构和其他对象(指代所述数据结构)(Parcelable是不可能的;无论如何,大部分数据都存在于C ++中)。我不仅要将任意对象发送到新活动,还要返回任意结果对象。

但是活动相互启动并通过Intents返回结果,并且Intents似乎无法包含任意对象。目前我使用static变量作为解决方法,但它让我担心内存泄漏,虽然只打算运行应用程序的一个实例(现在),但我不禁想想如果两个会发生什么某个Activity的实例以某种方式进入Activity堆栈。

那么,SO社区,你会推荐什么样的沟通机制?

P.S。有没有人知道Android是否会生成一个进程的多个副本,例如当两个应用程序独立启动第三个应用程序时?

2 个答案:

答案 0 :(得分:2)

  

我想在单个进程中的活动之间共享多兆字节数据结构和其他对象(指代所述数据结构)

我希望您真正想要的是一个集中的数据模型,您的所有活动都可以参考。

  

我不仅要将任意对象发送到新活动,还要返回任意结果对象。

同样,我希望您真正想要的是一个集中的数据模型,您的所有活动都可以参考。假设您希望在活动之间传递“多兆字节数据结构”,就像是说您想通过Web应用程序中的URL上的查询参数传递“多兆字节数据结构”。

  

目前我使用静态变量作为解决方法,但它让我担心内存泄漏,虽然只打算运行应用程序的一个实例(现在),但我不禁想想如果两个实例会发生什么相同的Activity以某种方式进入活动堆栈。

好吧,如果你真的有一个集中的数据模型(无论是通过静态数据成员还是其他方法),你就不必担心数据复制了。此外,每次通过Intent个附加内容传递数据时,您都在制作副本。

  

那么,SO社区,你会推荐什么样的沟通机制?

拥有一个集中的数据模型并在Intent附加内容中传递标识符。

  

是否有人知道Android是否会产生多个流程副本,例如:当两个应用程序独立启动第三个应用程序时?

默认情况下,每个应用程序都在一个进程中运行,无论是谁“启动”它们或它们“启动”了多少次。

答案 1 :(得分:0)

就像在Web服务和客户端之间传递任意对象一样,您可以序列化对象并在另一端反序列化它们,并在Intent包中传递这些对象。您可以使用XML或JSON序列化器/反序列化器来完成此操作。

编辑: 好的,在看到CommonWares评论之后,我做了一些挖掘意图和我的第一个建议,毕竟可能不是那么好。虽然它适用于较小的物体。

所以我可以想到几种选择。

  1. 如您所知,使用自定义应用程序对象
  2. 使用静态数据成员
  3. 序列化您的数据并将其存储在磁盘上
  4. 将其存储在数据库中
  5. 使用服务
  6. 不要在活动之间传递那么大的数据