使用资源引用属性序列化 class 实例是否安全?
Is it safe to serialize a class instance with a resource reference attribute?
我想序列化一个像这样的对象:
class Dog implements Serializable{
public String name;
public int iconDrawable;
}
iconDrawable
是一个指向 drawable 资源 来自 R.java.
的 int
所以我可以像这样制作一只狗:
Dog dog = new Dog();
dog.name= "Barky";
dog.iconDrawable = R.drawable.dog_icon; //portrait of a dog instance
我的问题是:
序列化此对象安全吗?iconDrawable 是最终数字吗?我在反序列化时是否总是得到相同的可绘制对象? 或者引用可能会在应用程序启动或应用程序终止时发生变化?
或者我应该将可绘制对象的名称存储在字符串属性字段中并使用 getIdentifier
? (有点复杂,但肯定有效)
R.java 是在构建时为您生成的。如果您修改(添加、删除等)资源,或者如果使用新版本的 Android 构建工具来构建项目,它将发生变化。
也就是说,如果您只是在运行时使用它来将对象传输到另一个 activity/fragment 或类似的东西,那么 serialize/deserialize 资源 ID 是安全的。
但是,如果您将其序列化以实现持久性,那将不安全,因为这些 ID 可能会在应用程序构建之间发生变化。在那种情况下,最好使用 getIdentifier
.
我想序列化一个像这样的对象:
class Dog implements Serializable{
public String name;
public int iconDrawable;
}
iconDrawable
是一个指向 drawable 资源 来自 R.java.
所以我可以像这样制作一只狗:
Dog dog = new Dog();
dog.name= "Barky";
dog.iconDrawable = R.drawable.dog_icon; //portrait of a dog instance
我的问题是:
序列化此对象安全吗?iconDrawable 是最终数字吗?我在反序列化时是否总是得到相同的可绘制对象? 或者引用可能会在应用程序启动或应用程序终止时发生变化?
或者我应该将可绘制对象的名称存储在字符串属性字段中并使用 getIdentifier
? (有点复杂,但肯定有效)
R.java 是在构建时为您生成的。如果您修改(添加、删除等)资源,或者如果使用新版本的 Android 构建工具来构建项目,它将发生变化。
也就是说,如果您只是在运行时使用它来将对象传输到另一个 activity/fragment 或类似的东西,那么 serialize/deserialize 资源 ID 是安全的。
但是,如果您将其序列化以实现持久性,那将不安全,因为这些 ID 可能会在应用程序构建之间发生变化。在那种情况下,最好使用 getIdentifier
.