Best Practice - Saving Activity data to android database

Refresh

December 2018

Views

449 time

1

I currently store my app data for an Activity in a Parcelable object. On orientation change, I save it and load it by using onSaveInstanceState and onRestoreInstanceState.

I want to save the data to the database when the user exits the activity.
And, I want to minimize the database calls. So,

Where should I write the code to save the data to database? Is it onPause(), onResume(), onStop() or onDestroy()?

3 answers

2

В настоящее время я храню данные приложения для деятельности в Parcelable объекта

Поскольку остальная часть вашего вопроса о базе данных ввода / вывода, обратите внимание , что Parcelableне имеет ничего общего с базой данных ввода / вывода.

Я хочу, чтобы сохранить данные в базу данных, когда пользователь выходит из деятельности.

Я рекомендую вам сохранить данные при изменении данных, а не ждать, и риск потери, что данные (например, приложение аварий).

Это OnPause (), onResume (), OnStop () или OnDestroy ()?

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

Не onDestroy(), так как нет никакой гарантии , что onDestroy()будет называться.

В любом из двух других, являются разумными. Основное отличие заключается в видимости:

  • Если деятельность берет на переднем плане, но эта деятельность тематически как диалог или иначе позволяет ваша деятельность выглядывать через, вы только приостановленное

  • Если деятельность не берет на переднем плане, и ваша деятельность больше не видна, вы помолчал и остановились

1

Поправка к принятому ответ: (Я удивлен, что это Марк Мерфи!)

Из андроида документации на жизненном цикле деятельности:

выполнение OnPause () очень краткое и не обязательно позволить себе достаточно времени для выполнения операции сохранения. По этой причине, вы не должны использовать OnPause () для сохранения данных приложений или пользователей, делают сетевые вызовы или выполнять транзакции базы данных;

1

Если вы на самом деле говорим о передовом опыте, то ни один из выше. Активность является объектом View-уровня. Некоторые могут возразить, что это гибрид контроллер и вид. В любом случае, это не модель или бизнес-уровня объекта.

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