Это скорее запрос вашего мнения в чем-то, а не вопрос. Это будет вроде длиной , так что не беспокойтесь, если у вас не хватает терпения прочитать все это. Остановитесь здесь, если вы этого не сделаете:)
В настоящее время я использую общие настройки для часто для сохранения некоторых значений, по одному , во времявыполнение моего приложения.Фактически, каждые 2 секунды значения меняются, и их необходимо сохранять в настройках, чтобы пользователь после закрытия приложения и повторного его открытия мог продолжить с того места, на котором остановился.
Проблема, с которой я столкнулсяМысль о том, что если по какой-либо причине приложение принудительно закрывается, например, батарея умирает, пока сохраняются значения, то когда пользователь пытается возобновить с того места, на котором он остановился, данные не будут действительными, как это было раньше.Ранее полностью не сохранялось (например, удалось сохранить только 2 из 5 значений).
Как я решил преодолеть эту проблему, это сохранить данные дважды, в «ДВЕ СЛОТА» (что я имею в видуПо слоту каждое значение, как я уже говорил, есть несколько значений, будет храниться либо в «valueName_1», либо «valueName_2»), и наряду с обычными хранилищами значений, я также сохраню два значения в настройках, которые будутиспользуется для проверки, были ли данные полностью сохранены или нет.Одно из этих двух значений curSavingSpot
будет относиться к позиции в одном из этих двух слотов, в которых я LAST сохранил (или имейте TRIED для сохранения в случае сбоя) значенийа другой curSavedSuccessfully
будет отслеживать , если сохраненные в LAST значения ВСЕ хранили успешно .
Например:
- изначально каждое поле в Shared Pref равно нулю.
curSavingSpot
указывает на 1 (первый «слот»), а curSavedSuccessfully
ложно. я начинаю сохранять значения в слоте 1 и сохраняю их без каких-либо прерываний, поэтому curSavedSuccessfully
будетБудьте верны, поскольку мы успешно сохранили все значения
через 2 секунды, я начинаю сохранять новые значения.На этот раз в слоте 2. Но сначала я установил значение curSavingSpot
в 2 И curSavedSuccessfully
в false.Скажем, когда я сохраняю 3 из 5 значений (осталось еще 2), устройство вылетает.Когда я перезагружаю его, я сначала проверю, успешно ли завершился последний сеанс сохранения, в соответствии с curSavedSuccessfully
, что не произошло, поэтому я смотрю на curSavingSpot
и принимаю противоположное значение, в этом случае я знаю 2не завершился успешно, поэтому это означает, что 1. имеет правильные значения.
Что вы думаете?Это хороший способ сделать это?Есть ли лучший способ убедиться, что он сохранил все необходимые значения?
Есть предложения?Есть ли недостатки этой идеи?
Извините за длинный пост.