【问题标题】:Is it safe to serialize a class instance with a resource reference attribute?使用资源引用属性序列化类实例是否安全?
【发布时间】:2016-02-08 15:14:17
【问题描述】:

我想序列化一个对象,例如:

   class Dog implements Serializable{

       public String name;
       public int iconDrawable;
    }

iconDrawable 是一个 int,指向来自 R.java 的 可绘制资源

所以我可以像这样制作一只狗:

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

我的问题是:

序列化此对象是否安全? iconDrawable 是最终数字吗?我反序列化时是否总是得到相同的 drawable? 或者引用可以应用启动或应用终止时发生变化?

或者我应该将可绘制对象的名称存储在字符串属性字段中并使用getIdentifier? (稍微复杂一点,但肯定有效)

【问题讨论】:

  • do I get the same drawable always when i de-serialize? 与同一个 apk 的编译 - 是的 ...

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多