Sqlbrite запускает операции вставки и запроса одновременно, запрос будет иметь нулевой результат
Приложение имеет два фрагмента в одной и той же активности. У фрагмента А есть кнопка, затем нажмите кнопку, чтобы запустить параллельное задание, которое будет вставлять или обновлять много записей в базе данных. Фрагмент Б включал ViewPager
, ViewPager
использует FragmentStatePagerAdapter
и удерживал фрагмент C, и каждая страница будет запрашивать и отображать запись из базы данных.
Фрагмент B будет работать правильно, пока не будет нажата кнопка во Фрагменте A. После этого случайные страницы в ViewPager не будут работать должным образом. Некоторые страницы будут запрашивать пустую запись, когда она существует. И тут есть две ситуации.
Первая ситуация, фрагмент A будет иметь операции вставки и обновления. Это наихудший случай, некоторые заданные записи получат нулевой результат во фрагменте C, даже если ViewPager
чтобы снова открыть указанную страницу, запись по-прежнему равна нулю до тех пор, пока параллельное задание во фрагменте A не будет завершено, и снова не откройте фрагмент B, после чего фрагмент C сможет снова работать должным образом.
Вторая ситуация, фрагмент A будет иметь операции вставки и запроса без операции обновления. В этом случае не будет получен нулевой результат, но некоторые заданные записи будут зависать до тех пор, пока параллельная задача во Фрагменте А не будет завершена.
Что вызывает эти проблемы? Заранее спасибо.
1 ответ
Я не уверен, но я думаю, что вам нужно использовать Transaction Handling для операций с базой данных во фрагменте A. Когда вы вставляете или обновляете данные в базе данных из фрагмента A, вам нужно использовать следующие методы:
database.beginTransaction();
database.setTransactionSuccessful();
database.endTransaction();
Пожалуйста, проверьте эту ссылку, чтобы получить подробное описание этих методов и использования. http://www.tothenew.com/blog/sqlite-locking-and-transaction-handling-in-android/