2013-10-05 8 views
1

В моем приложении есть несколько действий. Все они используют MySingleton для чтения и хранения некоторых данных.Когда сохранять состояние модели?

  • Состояние одного синглета загружается из файла при первом доступе.
  • Состояние часто меняется.
  • Состояние не так мало (~ 1 МБ).
  • Этот синглтон является чем-то вроде модели для моего приложения.

Итак, я хочу сохранить его в файле только тогда, когда больше изменений не произойдет - после прекращения всех действий. Как мне это сделать?

+2

Вы не должны делать это «после прекращения всех действий», так как у вас нет контроля над этим. Вы должны делать это в 'onPause()' в каждом действии, так как вы понятия не имеете, будет ли ваше приложение убито, когда оно перейдет на задний план. Несколько часов назад была аналогичная дискуссия. Просто код в соответствии с жизненным циклом деятельности и не делайте предположений, и все будет круто. – Simon

+0

@Simon нормально, но как насчет размера 20 МБ? Рекомендации для Android-подсказок, чтобы избежать выполнения тяжелых операций во время onPause() и использовать для этого onStop(). С другой стороны, как вы сказали, нет никаких гарантий, которые будут вызывать onStop(). – Jofsey

+0

Правильно, 'onStop()' не может быть использован. Но, что же вы сохраняете как «состояние», которое занимает 20 МБ? – Simon

ответ

0

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

Это говорит о том, что вы находитесь в ситуации, которая гарантирует, что вы не выполните вышеуказанное: вы можете регистрировать каждую деятельность по мере ее возобновления с помощью Сервиса, который является липким, отменить регистрацию операции, когда она приостанавливается, сохранять состояние, если нет более зарегистрированных Мероприятия, наконец, остановка Службы. Вы также можете использовать привязку, чтобы облегчить это поведение (например, привязать к службе, сохранить состояние, когда последнее связывание не связано).

0

Из-за природы Android и управления процессом и памятью вы никогда не сможете гарантировать, что ваши действия и приложения будут проходить через определенные контрольно-пропускные пункты, в которых вы можете безопасно хранить свое состояние.

Наилучший подход, на мой взгляд, заключается в том, чтобы сохранить изменения в состоянии по мере их возникновения. Все ваше состояние меняется каждый раз? Наверное, просто часть его. Создайте базу данных и сохраните только то, что меняется каждый раз, когда она изменяется - это будет ваша самая безопасная ставка.

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