使用资源引用属性序列化类实例是否安全?

时间:2016-02-08 15:14:17

标签: java android serialization android-drawable android-resources

我想序列化像这样的对象:

   class Dog implements Serializable{

       public String name;
       public int iconDrawable;
    }

iconDrawable是指向R.java的可绘制资源的int。

所以我可以像这样做一只狗:

Dog dog = new Dog();
dog.name= "Barky";
dog.iconDrawable = R.drawable.dog_icon; //portrait of a dog instance

我的问题是:

序列化此对象是否安全? iconDrawable是最终数字吗?我在反序列化时总是得到相同的绘图吗?或参考可以在应用启动或应用终止时更改?

或者我应该在String属性字段中存储drawable的名称并使用getIdentifier? (稍微复杂但确实有效)

1 个答案:

答案 0 :(得分:3)

R.java是在构建时为您生成的。如果您修改(添加,删除等)资源,或者可能使用新版本的Android Build Tools来构建项目,它将会改变。

如果您只是在运行时使用它来将对象传输到另一个活动/片段或类似的东西,那么序列化/反序列化资源ID是安全的。

但是,如果您将其序列化为持久性而不安全,因为这些ID可能会在应用程序构建之间发生变化。在这种情况下,最好使用getIdentifier