2013-10-02 2 views
0

Мое приложение имеет:одновременно SQLite доступ в андроида приложения

Activity A that reads from sqlite database 
Service with notification that writes to the database 
on clicking Notification, Activity A opens up 

чтение по ActivityA очень маленькая задача (в отношении времени, затрачиваемое на чтение) но письмо от службы в базе данных очень долго (иногда требуется 5-10 минут)

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

поэтому activityA должен ждать (на 5-10 минут) для чтения из базы данных.

на исследования в дальнейшем я наткнулся на этот

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransactionNonExclusive()

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

+0

Может быть, вы можете приостановить писать, когда ваша активность находится на переднем плане и требует набор данных уже в БД. –

+0

- это ваш сервис и деятельность в двух разных процессах? если нет, просто поделитесь одним экземпляром вашей базы данных. – njzk2

ответ

0

есть ли другой способ иметь доступ к параллельной базе данных?

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

Главное, что вы должны убедиться, что у вас есть только одно соединение в базу данных (вы не можете писать/читать из двух разных подключений одновременно). И попробуйте подумать об использовании Singleton. В этом случае (а также в других) это очень эффективное и чистое решение, и вы можете избежать многих проблем с доступом к db.


Вы упомянули, что ваша задача может длиться 5-10 мин. В подобных случаях каждый пользователь должен знать, что вы выполняете некоторые вычисления в фоновом режиме e.q. покажите некоторый прогрессDialog, progressBar или просто запустите анимацию изображения.

Если вы показываете некоторые данные, например, в списке, это хорошая причина использовать ленивую загрузку.

Есть также посмотреть на эти статьи:

Смежные вопросы