Android Firebase и Appmetrica конфликт - PullRequest
0 голосов
/ 14 мая 2018

Я использую базу данных Firebase Realtime и Yandex Analytics (AppMetrica).Когда я пытаюсь использовать оба этих SDK, я получаю сообщение об ошибке в базе данных Firebase:

    05-14 16:01:47.797 8194-8229/com.backgrounds.test:Metrica E/SQLiteLog: (5) database is locked
05-14 16:01:47.810 8194-8229/com.backgrounds.test:Metrica E/SQLiteDatabase: Failed to open database '/data/user/0/com.backgrounds.test/databases/backgrounds-74bc1.firebaseio.com_default'.
    android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
        at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:635)
        at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:321)
        at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:295)
        at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:216)
        at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:194)
        at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:493)
        at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:200)
        at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:192)
        at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:864)
        at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:849)
        at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:724)
        at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:295)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:238)
        at com.google.android.gms.internal.firebase_database.zzu.zza(Unknown Source:5)
        at com.google.android.gms.internal.firebase_database.zzu.<init>(Unknown Source:21)
        at com.google.android.gms.internal.firebase_database.zzq.zza(Unknown Source:99)
        at com.google.android.gms.internal.firebase_database.zzbz.zzq(Unknown Source:6)
        at com.google.android.gms.internal.firebase_database.zzck.zzca(Unknown Source:48)
        at com.google.android.gms.internal.firebase_database.zzck.zza(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzcl.run(Unknown Source:2)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)

Мое приложение фактически не будет аварийно завершать работу, поскольку эта ошибка находится внутри процесса, в котором работает AppMetrica, но я постоянно вижуокно "Приложение остановлено".

Без инициализации AppMetrica все работает отлично, и я не получил никаких ошибок.Я знаю только, что AppMetrica использует отдельный процесс для запуска.Может кто-нибудь объяснить мне, как это исправить?

1 Ответ

0 голосов
/ 15 мая 2018

Официальный документ :

Как работает библиотека AppMetrica Библиотека AppMetrica состоит из двух разделов: клиент и сервис.Клиентская секция предварительно проверяет данные и передает их в сервисную секцию, которая отвечает за хранение данных и отправку их на сервер.Служба работает в отдельном процессе.Это связано с тем, что библиотека оказывает минимальное влияние на производительность и память приложения.Кроме того, это освобождает библиотеку от зависимости от стабильности приложения, поэтому она может хранить и доставлять данные даже в случае сбоя или нестабильности приложения.Тем не менее, это вводит определенные особенности для работы с AppMetrica.Если само приложение имеет несколько процессов, инициализация AppMetrica должна выполняться одинаково и с использованием одинаковой конфигурации.В противном случае вы можете столкнуться с ситуацией, когда конфигурация библиотеки AppMetrica зависит от того, какой из процессов инициализируется первым (поскольку каждый процесс имеет свой собственный экземпляр клиентской части AppMetrica, в то время как есть одна общая служебная часть).Мы рекомендуем инициализировать библиотеку AppMetrica в методе Application.onCreate () (таким образом, библиотека выполняет вызов метода Application.onCreate () в каждом процессе).Однако вы должны учитывать жизненный цикл ContentProvider.Нет гарантии, что экземпляр Application будет создан до создания экземпляра ContentProvider.Также имейте в виду, что код в методе Application.onCreate () работает и для процесса обслуживания.Поэтому, если вы не хотите, чтобы какой-то код выполнялся более одного раза, не помещайте его в метод Application.onCreate ().Было бы лучше запустить этот код при создании других компонентов или поместить его в отдельный Сервис.Вам также следует избегать выполнения длительных операций внутри метода Application.onCreate ().

Похоже, вам следует избегать доступа к базе данных из процесса AppMetrica.Если это не помогло, вы можете предоставить дополнительную информацию об использовании Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...