2016-02-17 4 views
0

Ситуация в том, что у меня есть база данных журнала только для приложений, и в нее периодически вставляются строки. Это работает быстро и безупречно, но мне любопытно ...Как запустить и забыть SQLite базу данных вставить на Android?

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

Как бы вы реализовали это?

ОБНОВЛЕНИЕ: для тех, кто не знаком с понятием «огонь и забыть», это означает выполнение задачи как можно быстрее без блокировки и игнорирования результата.

+1

Пожалуйста, определите огонь и забудьте –

ответ

0

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

  • Использование AsyncTask, который поддерживает пул потоков

  • Используйте свой собственный пул потоков

  • Используйте одинарные нити, отбрасывая их, когда сделано

  • Используйте IntentService, что может быть полезно, если вы загружаете эти записи и вставляете их в кусок, так как это может занять достаточно много времени, чтобы сделать услугу стоящей

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

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

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