如何监控将任何 Parcel 数据放入持久存储的过程

Posted

技术标签:

【中文标题】如何监控将任何 Parcel 数据放入持久存储的过程【英文标题】:How to monitor the process of placing any Parcel data in to persistent storage 【发布时间】:2018-04-05 00:41:09 【问题描述】:

因为Parcel doc 这么说

Parcel 中任何数据的底层实现发生变化都可能导致旧数据不可读。

所以我想知道有没有办法监控这个过程,这样我们就可以防止将Parcel数据放到持久存储中。

另外,Serializable对象是否也有同样的问题,如果有,如何监控。

【问题讨论】:

【参考方案1】:

所以我想知道有没有办法监控这个过程,这样我们就可以防止将 Parcel 数据放到持久存储中。

Parcel 永远不会写入持久存储。这就是除了Serializable 之外还有Parcelable 的一部分。

Serializable 对象是否也有同样的问题

当您尝试读取旧值时,Serializable 类中的更改可能会导致问题。

如何监控

由于您是将Serializable 对象写入磁盘的人,因此请自行监控。我想不出android会在哪里自动将您的Serializable类写入磁盘。

【讨论】:

我测试了Serializable,当你更改成员类型时它会崩溃,其他情况,它可以正常工作,例如更改成员名称,删除或添加成员。 遇到过故意将parcel写入持久化存储,比如Parcel parcel = Parcel.obtain(); object.writeToParcel(parcel, 0); contentValues.put("key", parcel.marshall()); @twlkyao:在你的后一个问题中编写代码的人违反了Parcel 合同。如果这是在某处的 AOSP 中,请提出问题。如果这是在您控制的应用程序中,请修复它。 是的,这是在我们的应用程序中,我可以通过搜索 Parcel.obtain() 找到调用,marshall 或 unmarshall,我将添加一些方法尝试防止其他人这样做。

以上是关于如何监控将任何 Parcel 数据放入持久存储的过程的主要内容,如果未能解决你的问题,请参考以下文章

Android 包裹,存储在内存中还是磁盘上?如何存储在磁盘上

如何使用 Parcel 将资产与应用程序的其余部分分开构建

将抓取的推文放入数据库

sentinel监控持久化:sentinel控制台监控数据持久化

自定义持久存储?

是否可以创建自定义核心数据持久存储协调器?