2010-11-04 1 views
3

У меня есть приложение, которое позволяет пользователям запрашивать sqlite DB. Когда приложение запускается, он загружает URL-адрес, чтобы узнать, есть ли какие-либо обновления базы данных в фоновом потоке.Лучшая стратегия для обновления базы данных SQLite в фоновом режиме при использовании базы данных

К сожалению, это приводит к возникновению блокировок, если пользователь выбирает функцию, которая пытается запросить базу данных во время ее обновления.

Мой вопрос двоякий.

  1. Что является лучшей стратегией для предотвращения конфликтов в этом сценарии.

    • Скопируйте базу данных в другой файл обновить его и скопировать обратно
    • Есть какие-одиночку эксплуатации и использовать его для планирования операций в очереди.
    • петли и ждать замок, чтобы открыть (хотя я не хочу, чтобы протягивать пользователя)
  2. Можно ли приостановить фоновый поток до тех пор, как раз перед приложение завершается и запустить обновления только до прекращения подачи заявки.

Если у кого-то есть какие-либо советы, я был бы признателен за то, что я должен запустить обновление, не требуя, чтобы пользователь прекратил использовать приложение.

+0

Каково было ваше решение? – g19fanatic

+0

Все еще работаю над этим, поскольку я был на дороге в последнее время .... –

ответ

0

Чтобы ответить на ваш вопрос, я считаю, что № 1 пункт 3 - лучшее решение для вашей конкретной проблемы на Iphone. Увидев, что вы не можете начать с другого потока для обработки фонового рисунка, небольшое ожидание (которое большинство программ имеет в начале) является стандартным действием.

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

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

+0

Да, ожидание в начале не происходит как его фоновый поток, который пользовательский интерфейс может использовать. Другим вариантом было бы для меня мгновенно заблокировать пользователя и сказать им, что БД обновляется, но меня попросили не делать этого –

+0

У вас есть код для цикла ожидания, я могу использовать –

+0

Сколько времени займет ? Несколько секунд для значка (песочные часы, вращающийся круг, небольшое животное, идущее по кругу) без описания никогда не будет рассматриваться как вынужденное ожидание ... в сегодняшнем мире все очень привыкли к этому решению :) – g19fanatic

0

Просьба уточнить, - похоже, что запрос базы данных должен быть очень короткой и быстрой функцией, хотя загрузка URL-адресов может быть намного более продолжительной. Удерживаете ли вы блокировки базы данных во время всей операции загрузки URL-адресов? Если это так, я думаю, что вы хотите загрузить URL-адрес как одну операцию - и как только все данные будут получены - быстро примените их к своей базе данных, таким образом, не удерживая базу данных во время загрузки URL-адреса.

+0

Запросы к базе данных коротки. Загрузка URL-адресов в фоновом режиме снова не возникает, я не открываю базу данных до завершения загрузки URL-адреса. Проблема возникает, когда я пытаюсь обработать URL-адрес и создавать инструкции SQL для обновления БД. Скорость обновления также не является проблемой, просто чтобы пользователь мог в одном экземпляре выполнить функцию, которая запрашивает данные из БД во время обработки обновления. –

+0

Я думаю, я просто пытаюсь понять лучшее решение, учитывая ограничения блокировки файла. –

+0

Как раз для меня совершенно ясно: процесс обновления также происходит и в фоновом потоке. –