Как контролировать процесс помещения любых данных Parcel в постоянное хранилище

Поскольку в документе Parcel говорится, что

изменения в базовой реализации любых данных в Parcel могут сделать старые данные нечитаемыми.

Поэтому мне интересно, есть ли способ контролировать процесс, чтобы мы могли предотвратить размещение Parcel данных в постоянном хранилище.

Кроме того, есть ли у объекта Serializable такая же проблема, если да, то как контролировать.


person twlkyao    schedule 24.10.2017    source источник


Ответы (1)


Поэтому мне интересно, есть ли способ контролировать процесс, чтобы мы могли предотвратить размещение данных Parcel в постоянном хранилище.

Parcel никогда не записывается в постоянное хранилище. Это часть смысла наличия Parcelable в дополнение к Serializable.

имеет ли объект Serializable ту же проблему

Изменения в классе Serializable могут вызвать проблемы при попытке чтения более старых значений.

как контролировать

Поскольку именно вы записываете свои Serializable объекты на диск, следите за ними сами. Я не могу придумать места, где Android автоматически запишет ваш класс Serializable на диск.

person CommonsWare    schedule 24.10.2017
comment
У меня есть тест Serializable, он падает, когда вы меняете тип члена, другое условие, он работает нормально, например, изменяя имя члена, удаляя или добавляя член. - person twlkyao; 24.10.2017
comment
Я столкнулся с преднамеренной записью посылки в постоянное хранилище, например Parcel packet = Parcel.obtain(); object.writeToParcel (посылка, 0); contentValues.put(ключ, посылка.marshall()); - person twlkyao; 24.10.2017
comment
@twlkyao: тот, кто написал код в вашем последнем вопросе, нарушает контракт Parcel. Если это где-то есть в AOSP, сообщите о проблеме. Если это в приложении, которым вы управляете, исправьте это. - person CommonsWare; 24.10.2017
comment
Да, это в нашем приложении, я могу найти вызов с помощью поиска Parcel.obtain(), marshall или unmarshall, я добавлю какой-нибудь метод, чтобы предотвратить это от других людей. - person twlkyao; 24.10.2017