Android Intents有一个方便的toURI()方法,API文档似乎指出这是一种将Intent序列化为URI,然后将其解析回Intent的方法。不幸的是,在测试这个功能时,我发现它没有序列化所有额外的东西,只是原始类型(boolean,int,long,float,String)。如果一个intent指定任何Parcelable或数组附加组件,那么那些将会丢失。
在哪里(如果有的话)记录了此限制?这种行为是否有一些明显的原因(我可以想象Parcelables有些困难)?最重要的是,是否有推荐的方法来序列化和解析Intents?
我当前的实现只是将Intent组件(action,categories,data uri和extras)写入SharedPreferences。此策略不支持Parcelables。
答案 0 :(得分:7)
Android Intents有一个方便的toURI()方法,API文档似乎指出这是一种将Intent序列化为URI,然后将其解析回Intent的方法。
不是。
在哪里(如果有的话)记录了此限制?
我根本没想到额外的内容会被包含在Uri
中。这类Uri
生成背后的重点是向您展示如何将Uri
添加为网站上的链接,并且您不需要为该方案添加额外内容。
toURI()
不是序列化。
最重要的是,是否有推荐的方法来序列化和解析Intents?
没有。特别是,根据定义,Parcelable
无法序列化。
我当前的实现只是将Intent组件(action,categories,data uri和extras)写入SharedPreferences。
这种做法简直就是奇怪。
使用数据库。如果您作为一个年幼的孩子受到数据库的攻击,因此生活在对数据库的恐惧中,请使用JSON,XML或Serializable
/ ObjectOutputStream
对文件进行序列化。使用SharedPreferences
表示用户偏好。
此策略不支持Parcelables。
也不应该。也不可以。 Parcelable
旨在将对象图转换为内存块,仅用于正在运行的设备。它不是一个长期的持久性机制。