Android: должен ли доступ к базе данных в приложении осуществляться асинхронным способом?

#java #android #sql #sqlite #asynchronous

#java #Android #sql #sqlite #асинхронный

Вопрос:

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

Должен ли я:

  • Доступ к базе данных с помощью асинхронной задачи или аналогичной
  • Использовать какой-то конвейер для управления запросами к базе данных?

Не могли бы вы указать мне на соответствующие примеры кода, если это необходимо, пожалуйста?

Заранее спасибо!

Ответ №1:

Да, вы должны использовать асинхронный доступ, это лучшая практика. SDK содержит AsynchTask специально для этого.

 BuyAsyncTask extends AsyncTask<Item, Void, Item> {
    @Override
    protected Item doInBackground(Item... params) {
        ..use DB here
    }

    @Override
    protected void onPreExecute() {
        ..some easy operation befor start thread
    }

    @Override
    protected void onPostExecute(Item resultTask) {
        ..do what you want, thread is finish
    }

}
  

Комментарии:

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

2. Кроме того, использование асинхронной задачи означает, что у меня должна быть AsyncTask в каждом классе, с которым я хочу использовать базу данных, это правильно?

3. Это похоже на команду, так думают. Вы можете написать InsertAynckTask, Update … и т.д., или вы можете использовать BuyAsynckTask, Sell .. и т.д. Я думаю, что последнее — лучшее решение. В onPreExecute вы можете получить экземпляр вашего dbDAO и использовать insert / update ..etc в doInBackground.

Ответ №2:

У меня есть лучшее решение:

Я использую конвейерную систему, где у меня есть исполняемые файлы, которые отправляются в конвейер и выполняются в том порядке, в котором они были размещены. Я нахожу это решение простым в управлении, аккуратным и эффективным.

Пример конвейерной обработки здесь: http://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers /