1

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

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

那么,SO 社区,您会推荐什么通信机制呢?

PS有谁知道Android是否会产生一个进程的多个副本,例如当两个应用程序独立启动第三个应用程序时?

4

2 回答 2

2

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

我希望你真正想要的是一个所有活动都可以引用的集中式数据模型。

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

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

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

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

那么,SO 社区,您会推荐什么通信机制呢?

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

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

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

于 2012-06-29T18:00:15.417 回答
0

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

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

所以我能想到几个替代方案。

  1. 正如您已经做的那样,通过使用自定义 Application 对象来使用静态数据成员
  2. 序列化您的数据并将其存储在磁盘上
  3. 将其存储在数据库中
  4. 使用服务
  5. 不要在活动之间传递那么大的数据
于 2012-06-29T17:48:57.723 回答