Параллелизм веб-просмотра Android вызвал исключение SQLiteException: база данных заблокирована - PullRequest
4 голосов
/ 29 марта 2012

Я не использую SQLite и веб-просмотр напрямую, веб-просмотры используются в рекламе в моем приложении (я использую AdMob).Есть несколько действий, которые работают как рабочий процесс, идущий вперед и назад, и некоторые действия выполняются в отдельном процессе. Я получаю такое исключение.

android.database.sqlite.SQLiteException: error code 5: database is locked
    at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
    at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1916)
    at android.webkit.WebViewDatabase.flushCacheStat(WebViewDatabase.java:874)
    at android.webkit.CacheManager.trimCacheIfNeeded(CacheManager.java:567)
    at android.webkit.WebViewWorker.handleMessage(WebViewWorker.java:193)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:150)
    at android.os.HandlerThread.run(HandlerThread.java:60)

Нет такого исключения, если я не использую рекламу.

Я полагаю, что веб-представление использует SQLite в фоновом режиме, и это исключение возникает, когда один WebView в Activity A блокирует базу данных для записи и WebView в Activity B (B выполняется в своем собственном процессе), который открывается поверх ActivityА также пытается записать в базу данных и завершается неудачно, потому что база данных уже заблокирована

Существует ли стандартный способ отключить неуправляемые веб-представления от использования базы данных, под неуправляемым я имею в виду использование сторонних библиотек, таких как AdMob SDK или настройку, чтобы не выбрасывать исключениеили обработать исключение.

...