Страница 1 из 1

SQLiteException: database is locked

Добавлено: 14 янв 2014, 10:52
adarash
Проблема вот в чем. Вычисления с использованием базы данных могут вестись с двух мест одновременно. Но в таком случае выдает ошибку "database is locked". Вести все последовательно нельзя. Вычисления тяжелые, если их проводить в одном потоке, то приложение просто повиснет на 5-10 секунд, я уже не говорю про слабенькие телефоны.
Подскажите кто нибуть, как с этим бороться? У меня была мысль вычисления проводить с помощью Handler (ну на подобии очереди что-то).
Подскажите пожалуйста. Очень надо.

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 11:42
KamiSempai
На сколько я знаю, эту проблему можно решить используя ContentProvider.
Точнее на этот вопрос сможет ответить Foenix.

Касаемо подвисаний. Не пойму, Вы обработку в UI потоке делаете?

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 11:49
adarash
KamiSempai писал(а): Касаемо подвисаний. Не пойму, Вы обработку в UI потоке делаете?
Тяжелые вычисления проходят в AsyncTask. Легкие в UI.

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 12:03
KamiSempai
Очевидно, легкие не такие уж и легкие. Тут на днях вебинар проходил, там как-раз рассказывалось как это можно узнать.

Немного по AsyncTask. Если API приложения выше 11 можно использовать его и не бояться параллельного обращения к базе. По умолчанию все таски выполняются последовательно. При более низком API они будут выполняться параллельно и этот фокус не прокатит.

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 12:08
adarash
KamiSempai писал(а):Очевидно, легкие не такие уж и легкие. Тут на днях вебинар проходил, там как-раз рассказывалось как это можно узнать.

Немного по AsyncTask. Если API приложения выше 11 можно использовать его и не бояться параллельного обращения к базе. По умолчанию все таски выполняются последовательно. При более низком API они будут выполняться параллельно и этот фокус не прокатит.
В том то и дело что на стареньких андроидах такое вылетает

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 12:33
Foenix
да, к.п. решит проблему.
Андроид вообще говоря не предназначен для сложных обработок данных. А что вы там такое обрабатываете, вычисляете?

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 12:50
adarash
Честно говоря. Приложение называется "Женский календарь". Заказали - я делаю. Сначала мне тоже показалась "Какие там могут быть сложные расчеты ?". А выходит что может. Попробуйте не только просчитать, но еще и спрогнозировать,а если еще и выборка за год. Да и программировал по принципу "пользователь - идиот", с кучей проверок на достоверность данных.
Как показала практика: примерно 6,7% пользовательской аудитории не в состоянии ввести в поле цифру(пришлось для старых версий писать свой NumberPicker), я уже не говорю о датах.

P.S. Что такое " к.п."? извините за незнание.

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 14:01
Foenix
KamiSempai писал(а):На сколько я знаю, эту проблему можно решить используя ContentProvider.
к.п.
ну, то, что вы говорите - тяжелыми вычислениями не назовешь)) проверки в полях - это ерунда, это к работе с базой данных не относится. Но ты говорил о то, что работа с бд занимает много времени, во всяком случае я так поняла. Возможно, неправильно спроектирована бд. Она отвечает нормальной форме?

Re: SQLiteException: database is locked

Добавлено: 14 янв 2014, 14:08
adarash
третьей. Доводить до 4 или 5 я считаю излишним.