2013-06-29 3 views
1

У меня есть Activity A, который открывается Activity B. Во время жизненного цикла B он создает множество данных, которые важны для последующего использования. Когда я покидаю Activity B, он будет уничтожен. Я хочу, чтобы, когда пользователь открывает B в следующий раз, эти важные данные будут восстановлены.Как сохранить данные в деятельности для последующего использования

Итак, вопрос в том, как хранить важные данные?

У меня было несколько предположений:

  1. SharedPreferences (context.getPrecerence(MODE_PRIVATE)). Это нехорошие варианты, потому что он позволяет сохранять только примитивные типы. Мне нужно сохранить java.io.Serializable объект (или по крайней мере Parcelable).

  2. Статическая переменная - не вариант. Я хочу, чтобы мои данные оставались, даже если JVM уничтожает мой процесс, когда пользователь переходит в другое приложение.

  3. Context.openFileOutput(). Является ли это нормально, чтобы делать ввод/вывод каждый раз, когда я вхожу в действие/закрываю его?

Что-то еще?

+1

Многие из ваших вариантов рассматриваются в Руководстве разработчика: [Хранение данных] (https://developer.android.com/guide/topics/data/data-storage.html) – Sam

+0

Просто используйте база данных http://developer.android.com/guide/topics/data/data-storage.html#db – for3st

+0

for3st, я имею дело с двоичными данными, поэтому SQLite - плохой вариант. Сэм, я видел эту ссылку, но какой вариант из этого списка вы проголосовали? –

ответ

1

Вы можете сохранить в SharedPreference с помощью gson.jar. см. this answer, связанный с этим

+0

Выглядит хорошо, это лучше, чем возиться с 'openFileInput'? –

0

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

Или вы можете использовать Bundle (используйте OnSaveInstance (Bundle)).

This answer is useful in Bundles

+0

Что касается 'OnSaveInstance' Как это может помочь, если я прекратил действие с помощью' finish() ', и когда я снова его создам,' onCreate (savedInstanceState) 'вызывается с' null'? –

0

Если вы просто хотите сохранить данные путем изменения конфигурации, onSaveInstanceState(Bundle) является то, что вы ищете. В противном случае используйте базу данных.

http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState

+0

Как это может помочь, если я перестаю работать с 'finish()', и когда я снова его создам, 'onCreate (savedInstanceState)' вызывается с 'null'? –

+0

'onSaveInstanceState' будет работать только для изменений конфигурации. Вы можете, безусловно, сохранить изменения в файле с помощью 'openFileOutput', но с использованием базы данных _may_ результатом будет более быстрый ввод-вывод. Просто убедитесь, что операции с файлом не выполняются в потоке пользовательского интерфейса. –

Смежные вопросы