Где хранится пакет onSaveInstanceState?

18

Я хотел бы знать, где расслоение «outState» метода onSaveInstanceState (Bundle outState) .

Сохраняется ли она в памяти или в памяти устройства?

Меня беспокоит безопасность данных, которые хранятся в комплекте.

    
задан Jleuleu 11.11.2011 в 10:31
источник

3 ответа

7

Я не думаю, что какой-либо вредоносный фоновый процесс может получить данные пакета вашего приложения. Не описано, как Android обрабатывает данные Bundle. Это может быть или не быть записано на диск в том случае, если ваше приложение будет очищено, в то время как указано. Однако, учитывая, что мы не знаем, сохранены ли эти данные на диске, и если это так, учитывая, что мы не знаем, где и почти наверняка не имеют доступа на чтение к этой части диска, я бы Не беспокойтесь о том, что какой-то сторонний процесс сможет восстановить эти данные.

Следовательно, я не понимаю, что вы думаете об экспозиции. Хотя я могу что-то упустить. Тем не менее, в ответ на ваш вопрос, это абсолютно в памяти, пока ваше приложение живое, и если ваше приложение связано с ним, оно может быть или не быть написано где-то скрытым, но мы не знаем, потому что Google не сказал нам.

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

ответ дан Genia S. 11.11.2011 в 10:48
  • Спасибо, это именно то, что я хотел знать –  Jleuleu 11.11.2011 в 10:53
  • Это неточный ответ. Рассмотрим случай, когда процесс приложения автоматически убит ОС (в то время как приложение было в фоновом режиме), а затем пользователь возвращается в приложение, затем ОС восстанавливает приложение (создает новый процесс и восстанавливает стек активности). Несмотря на то, что процесс приложения не присутствовал некоторое время, пакет поставляется в восстановленную активность, поэтому он каким-то образом / где-то хранился в системе. В свою очередь, система просто не определяет, как именно она хранит пакеты, поэтому теоретически она может использовать файловую систему. –  Vit Khudenko 26.01.2014 в 15:42
  • Вы также можете проверить соответствующий ответ от CommonsWare: stackoverflow.com/a/12468776/247013 –  Vit Khudenko 26.01.2014 в 15:45
  • @Arhimed, я думаю, что вы раскалываете волосы, но я отредактирую свой ответ, чтобы быть понятным. –  Genia S. 26.01.2014 в 18:50
  • @GeniaS. Спасибо за ваше редактирование. Теперь он ясно заявляет, что мы просто не знаем, где хранится пакет, когда процесс убит. –  Vit Khudenko 27.01.2014 в 10:48
8

Чтобы хранить данные только для времени жизни приложения (то есть временно), используйте событие активности onSaveInstanceState (Bundle)

Эти данные будут храниться только в памяти, пока приложение не будет закрыто , данные будут доступны в любое время, когда это действие начнется в течение текущего времени жизни приложения.

Объяснение: , если данные хранятся здесь активностью A, тогда приложение показывает другое действие или поворачивает экран (следовательно, закрывает A), а затем возвращается к A, данные могут быть извлечены для заполнения элементов управления , Однако, если приложение закрыто и открыто снова, данные исчезнут, а элементы управления вернутся к значениям по умолчанию.

Пример использования: сохранение текста, введенного пользователем, и выбор, составляющий заказ, запись в блоге, сообщение и т. д.

Примечание:

Важно заметить, что только активность уничтожена и воссоздана, а не все ваше приложение! Приложение Android может состоять из многих видов деятельности, служб и контент-провайдеров! Если приложение закрыто (например, нажав кнопку «Назад», то все значения будут удалены. SavedInstaceState только там, чтобы сохранить данные временными, когда активность уничтожена / воссоздана, а не само приложение.

Если вы хотите сохранить данные навсегда, вам необходимо сохранить их либо в виде настроек, либо в ContentProvider / database.

    
ответ дан user370305 11.11.2011 в 10:47
  • Спасибо, я просто хотел знать, что данные хранятся в памяти. –  Jleuleu 11.11.2011 в 10:54
1

Моя догадка будет в памяти, но лучший способ защитить ваши данные - не доверять системе и шифровать ее. Никогда не доверяйте клиенту (в данном случае клиентом является ОС).

EDIT:

Чтобы быть ясным, я не говорю, что зашифруйте пакет. Скорее я говорю, что любые конфиденциальные данные не следует вводить в комплект. Если вы должны поместить пользовательские данные в пакет, затем зашифруйте его.

Но в конечном итоге вы должны хранить как можно меньше конфиденциальных данных на клиенте. По этой же причине сайт электронной коммерции будет показывать только последние 4 цифры кредитной карты.

    
ответ дан pjco 11.11.2011 в 10:44
  • Android использует onSaveInstanceState / onRestoreInstanceState для сохранения состояния пользовательского интерфейса каждого представления, когда система убивает действие, которое может потребоваться восстановить в будущем (например, при вращении экрана или в низкой памяти). Если вы действительно хотите зашифровать эту информацию (вы этого не сделаете), вам нужно будет сохранить и восстановить всю информацию о состоянии для всех представлений самостоятельно. Я не могу придумать ни одного приложения, где имя текстового поля, в котором есть фокус, - это то, что вам нужно было бы зашифровать ... –  user113215 17.09.2012 в 18:23
  • Я не говорю шифрование пакета. Скорее я говорю, что любые конфиденциальные данные не следует вводить в комплект. Если вы должны поместить пользовательские данные в пакет, затем зашифруйте его. –  pjco 17.09.2012 в 19:43