Лучший способ загрузить мои таблицы Sqlite после создания таблиц при запуске - PullRequest
1 голос
/ 18 февраля 2011

У меня есть две статические таблицы с примерно 500 записями в каждой, которые предоставляют справочный материал для некоторых ListViews в моем приложении. Когда приложение запускается впервые и таблицы создаются, я запускаю процесс заполнения таблиц, который занимает меньше минуты, но я искал запуск процесса в фоновом режиме с помощью Async Task с диалоговым окном прогресса, позволяющим пользователю узнать, что происходит , Я обеспокоен тем, что во время выполнения процесса и добавления данных, а затем пользователь наклоняет телефон, процесс будет отменен. Каково будет состояние моей базы данных тогда? Является ли Async Task лучшим решением для этого или я должен использовать Threading?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Вы также можете решить обрабатывать изменения конфигурации самостоятельно, используя android:configChanges в своем манифесте.

Затем вы реализуете метод onConfigurationChanged и выполняете любые действия внутри него.

См. Документ для разработчиков .

Когда изменение конфигурации происходит во время выполнения, действие по умолчанию отключается и перезапускается, но объявление конфигурации с этим атрибутом будетактивность от перезапуска.Вместо этого действие продолжает выполняться, и вызывается его метод onConfigurationChanged ().

0 голосов
/ 18 февраля 2011

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

Так что, если вы хотите, чтобы ваша активность действовала так, как будто при вращении вы можете начать прямо вверх, где вы остановились, тамэто метод с именем onRetainNonConfigurationInstance ().Это в основном метод, который хранит объекты, которые не могут быть разделены, как в saveInstanceState ()

Так что идея такова:

public void onCreate(Bundle a) {

   ...
   AsyncTask myTask = getNonConfigurationInstance();
   if (myTask == null) {
     myTask = new AsyncTask();
     myTask.execute();
   }
   ...
}

public Object onRetainNonConfigurationInstance() {
   return myTask;
}

Это будет поддерживать выполнение асинхронной задачи, и когда вы получитеВаш onCreate вызывается после поворота, вы просто берете его обратно и делаете то, что нужно сделать.

Одна вещь, о которой следует помнить, - это Прогресс прогресса.Он должен быть уничтожен и переинициализирован в новом государстве.Также полное отклонение и показ его в первую очередь должно быть сделано вне AsyncTask.Но ничего не значит, что AsyncTask не может вызвать какой-либо обратный вызов, который вы всегда устанавливаете в своем onCreate (), чтобы он уведомлял об обновлении интерфейса или проигрывании звука завершения и т. Д.

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