如何监控将任何 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 包裹,存储在内存中还是磁盘上?如何存储在磁盘上