|
Android
|
|||||||||||||||||||||
Работа с SqlLite из нескольких потоков19.10.2017, 10:26. Показов 1600. Ответов 5
Метки нет (Все метки)
Есть 5 фрагментов. В каждом фрагменте есть потоки работающие с сетью. При onPause делаю
экземпляр DataBaseHelper создается при onCreate фрагмента и используется внутри другого потока. Но когда данных очень много и я перехожу между фрагментами в момент записи в БД, происходит ошибка :
Как бы решить эту проблему? Пробовал синхронизировать методы внутри DataBaseHelper и использовать один DataBaseHelper из Application, но в таком случае при смене фрагмента нужно подождать пока закончатся операции с базой которые начались в предыдущем фрагменте и только потом начинаются операции которые должны происходить в новом фрагменте. Добавлено через 9 минут + Получаю данные из сервера List<Data> и отправляю их на запись в БД
Добавлено через 11 минут UP. Запрос на сервер идет в цикле, оказывается в цикле не проверял
Но буду рад если подскажите как работаете с SqlLite, как лучше использовать. Может стоит создавать один экземпляр SQLiteDatabase db = getWritableDatabase(); для экземпляра DataBaseHelper (у меня в каждом методе открывается и закрывается "getWritableDatabase")
0
|
|||||||||||||||||||||
| 19.10.2017, 10:26 | |
|
Ответы с готовыми решениями:
5
Отобразить ход нескольких потоков в нескольких ProgressBar Работа с БД SQLlite стандартными средствами C# |
|
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
|
|||||||||||||||||||||||||||||||
| 19.10.2017, 13:16 | |||||||||||||||||||||||||||||||
Сообщение было отмечено ILNAR_93 как решение
Решение
ILNAR_93, открытие базы данных каждый раз достаточно долгая операция по сравнению с записью. Я для себя делал отсрочку при закрытии. Т.е. есть Runnable, в котором только один метод закрытия базы. И есть Handler с postDelayed. И когда идет запись в БД, то я проверяю, открыт ли у меня инстанс бд. Если не открыт, то открываю его. Если открыт, то у handler удаляю задачу с закрытием. А после записываю туда транзакцию и ставлю задачу с закрытием.
По локам базы самый простой вариант это создать final Object lockObject и проводить записи в бд по синхронизации с ним либо через синхронизированные методы. Я тут код накидал, чтоб показать Кликните здесь для просмотра всего текста
1
|
|||||||||||||||||||||||||||||||
|
Android
|
||||||
| 19.10.2017, 16:46 [ТС] | ||||||
|
demixdn, спасибо. Попробую переварить)
Добавлено через 29 минут А можно как то прервать операцию
0
|
||||||
|
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
|
|
| 19.10.2017, 17:33 | |
|
savePersons лучше не разбивать, но можно заливать порциями.
Например нам прилетел список из 3000, мы его разбиваем в Queue<ArrayList<Person>> и в каждом itemQueue хранить по 100...1000 персон. И потом циклом while(!queue.isEmpty) брать порции и применять savePersons. И если у вас прилетел приоритетная порция, то мы ее либо в начало добавляете, либо еще как то разрулить ситуацию.
0
|
|
|
Android
|
||||||
| 23.10.2017, 11:07 [ТС] | ||||||
|
demixdn, есть вопрос)
При записи понятно, открываем транзакцию, а при чтении не подскажешь как делать? я чуть по другому сделал, но с одним подключением к DB. и получается хендл закрытия может закрыть подключение в момент чтения
0
|
||||||
|
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
|
||||||||||||||||||||||||||
| 23.10.2017, 13:26 | ||||||||||||||||||||||||||
|
ILNAR_93, для записи берется getWritableDatabase. Для чтения берите getReadableDatabase, он может читаться из нескольких потоков. Это главная особенность. Поэтому читать можно из нескольких потоков, БД сама манипулирует запросами на чтение.
Я для чтения из базы в свое время написал простой класс и Callback. Класс выполняет указанную работу в другом потоке и возвращает результат по коллбэку в главный поток. Этот класс подходит для мелких асинхронных задач. Кликните здесь для просмотра всего текста
После этого просто расширяете класс StorageDatabase методом и небольшим внутренним классом
Но ошибка с закрытием базы все равно будет. Там тоже нужно проверять, если база открыта то вытягивать записи, а если закрыта, то сначала открыть. Добавлено через 3 минуты
1
|
||||||||||||||||||||||||||
| 23.10.2017, 13:26 | |
|
Помогаю со студенческими работами здесь
6
Запуск нескольких потоков Синхронизация нескольких потоков
Создание нескольких потоков Создание нескольких потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|