У меня есть небольшая БД и прочитать необходимую выписку из данных в объекте Singleton хранится статический, как это в классе под названием MainDataManager:хранение данных, когда приложение «заканчивается»
public class MainDataManager {
private static Context context;
public static MainDataManager mainDataManager = null;
public static MainDataManager getInstance(Context ctx) {
context = ctx;
if (mainDataManager == null) {
...get the data from DB
...put the data in static mainDataManager variable
}
return mainDataManager;
}
Теперь в каждом классе/деятельностях приложение я могу легко получить доступ к данным MainDataManager.mainDataManager.
В какой-то момент я хотел бы сохранить данные обратно в базу данных.
В настоящее время я делаю это на каждый вид деятельности в
@Override
protected void onPause() {
super.onPause();
saveState(); //saves the mainDataManager's data to the DB
}
Я хотел бы избежать этого и думаю, что это на самом деле «сохранить» достаточно, если я обновить базу данных только тогда, когда пользователь выходит из приложения (что бы это средство) - или даже лучше, когда Android хочет уничтожить объект MainDataManager.
Хотя я мог бы поместить свой saveState()
вызов в действие в методе onDestroy()
- я бы предпочел сохранить данные только в DB, если объект MainDataManager будет уничтожен. Но для нормального объекта нет onDestroy()
.
Что было бы лучшим способом справиться с этим?
ps Причина, по которой я не хочу сохранятьState() в каждом действии onDestroy()
, заключается в том, что сохранение в базе данных довольно медленно даже с очень маленькими данными (например, на старых телефонах Android!), И это просто не логика - только потому, что любая деятельность уничтожается, а затем обновляет БД.
Большое спасибо
Еще раз спасибо :-). Хорошо, тогда я оставляю это так, как это указано, однако, как уже упоминалось, обновление даже самой маленькой БД происходит довольно медленно, возможно, «isDirty» -flag может сократить время, необходимое для обновления. Выполнение в AsyncTask - отличный выход - однако я не уверен, что порядок выполнения AsyncTasks на самом деле всегда правильный. Помимо незначительной проблемы обеспечения «синхронизированных» методов обновления. – user387184
@ user387184: Доступ к SQLiteDatabase синхронизирован на уровне SQLiteDatabase, поэтому вам не нужно беспокоиться об этой конкретной проблеме. Вы также можете более активно хранить свои данные (например, на основе события пользовательского интерфейса), а не ждать, когда это необходимо. – CommonsWare