Помогите Диме помочь помогать помочь помогать

Адгезиметр

18.08.2016


Базы данных SQLite по умолчанию используют последовательный режим доступа, что может приводить к снижению производительности при интенсивных операциях чтения и записи данных из нескольких потоков. Для улучшения производительности в параллельном режиме эта база данных предлагает механизм упреждающей записи в журнал (Write-Ahead Logging, WAL), применение которой можно разрешить явно: SQLiteDatabase db = SQLiteDatabase.openDatabase( ... ); db.enableWriteAheadLogging();


После включения механизма WAL база данных может выполнять несколько транзакций одновременно и разрешает одновременные операции чтения для доступа к базе данных, так как несколько читающих объектов, работающих параллельно, не могут нарушить целостности данных. При этом WAL гарантирует, что операции чтения и записи не будут одновременно с одним и тем же набором данных: запись выполняется в копию базы данных, а запись в исходную базу данных не производится, пока не завершатся все активные операции адгезиметр.


Вообще говоря, операция доступа к Content Provider предполагает взаимодействие с постоянно существующим хранилищем - с базой данных или с файлом, - поэтому она не должна выполняться в UI- потоке, так как длительная операция может существенно задерживать отображение элементов пользовательского интерфейса на экране. Вместо этого выполнение операций провайдера должно производиться в фоновых потоках. Обязанность по созданию фоновых потоков возлагается па пользователя провайдера, это может быть приложение, вызывающее ContentResolver. Реализация провайдера вызывается в том же потоке, где был вызван ContentResolver, если вызов исходит из компонента в том же процессе приложения. Но если Content Provider вызван из другого процесса, реализация провайдера вызывается в связующем потоке.