Я работаю с довольно сложным действием по редактированию данных в Android, которое много использует объект пакета при сохранении данных формы.
В целом это работает довольно хорошо, и у меня не было потери данных. Однако у меня есть странная периодически возникающая ошибка, которую я не могу найти прямой причиной.
Это происходит, когда я отправляю намерение в галерею (используя startActivityForResult), чтобы позволить пользователю выбрать изображение профиля. Небольшое (96x96) растровое изображение возвращается в комплекте, и я сохраняю эти данные в их профиле. Это работает безупречно примерно в 90% случаев, однако в некоторых случаях вместо возврата с изображением, сохраненным в пакете, он возвращает пакет, который не может быть проанализирован. Это происходит довольно часто, если я оставляю устройство в режиме выбора галереи на несколько минут. (> 5 минут холостого хода).
Когда я пытаюсь получить доступ к какой-либо функциональности пакета, я получаю следующее исключение времени выполнения:
java.lang.RuntimeException: Parcel android.os.Parcel@44a06078: Неизменяемый код неизвестного типа -8913000 со смещением 392
Примечания:
o Когда возникает эта ошибка, создается впечатление, что действие редактирования было уничтожено и его необходимо воссоздать. (До появления ошибки она проходит через onCreate, onStart и onRestoreInstanceState (где происходит сбой)).
o Похоже, это заставляет его пропускать раздел «onActivityResult» (или, по крайней мере, никогда не заходить так далеко.
o Объект bundle, полученный в onRestoreInstanceState, не имеет значение null, но любой другой доступ к объекту (включая проверку, если он пустой) приводит к этой аварии.
Проверяя исходный код пакета, я обнаружил, что сбой, кажется, происходит из пакета, выполняющего внутреннюю проверку типа с использованием сохраненного флага int. Ошибка возникает, когда флаг int обнаруживает тип, которого нет в списке (пока он постоянно равен -8913000).
o Я только видел эту ошибку на froyo (2.2)
Кто-нибудь сталкивался с подобной ошибкой? У кого-нибудь есть предложение, где искать дальше?
В то же время я попытаюсь составить уменьшенную версию этого раздела кода, которая может быть пост-возможной, и посмотреть, воспроизводит ли она по-прежнему проблему.