【发布时间】:2010-08-04 09:48:52
【问题描述】:
我需要序列化一个全面的应用程序(游戏)状态,以便通过网络传输或保存到磁盘并在以后检索。
当然,Bundles 用于在多个用例中保存/恢复状态,因此使用它们是理想的选择。但是,出于某种原因,Bundle 不可序列化。
搜索解决方案只发现了将 Bundle 转换为 Parcel 然后对其进行编组的不可接受的黑客攻击,但这不是一个可接受的解决方案,因为无法保证以后可以解组数据日期或在远程设备上。
所以现在看来,唯一的解决方案似乎是从 Bundle 中获取整个密钥集,获取每个包含的 Object,在每个 Object.Class 上执行相当大的 switch/case 并手动构造一个巨大的 ByteBuffer 或与所有这些数据相似,以及大小和类型信息,以便在另一侧成功地重建整个事物。
不完全平滑。
有人知道更好的方法吗?也许有人已经为 Bundle 创建了一个实用函数来执行此操作?
【问题讨论】:
-
这只是Android的一个愚蠢的观点。如前所述,BundleParcelable 是可行的核心(和 ParcableBinary),但 Parcelable 仅设计用于非持久使用。应该包含一些持久的 BundleXML 或 BundleJSON(或任何东西,真的).. 我见过的“最佳”解决方案只是将一些 JSON 推入 Bundle 属性,否则让 Bundle 爬走然后死去。