#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 /