我在少数设备上遇到此崩溃,但仅限于 Android 4。
我使用的是 Firebase Android SDK 10.2.1 11.0.2。推迟更新到最新版本,因为它也会强制更新 Google Play 服务,并且许多用户继续保留旧的 GPS 版本。
还有其他人看到这个问题吗?
Update:这是早些时候工作的。我从 Firebase SDK 9.4.0 升级到 10.2.1,并将编译版本 23 升级到 25 后开始崩溃。崩溃仅发生在 Android 4.4 (Kitkat 19) 上
Updated例外:
Fatal Exception: java.lang.RuntimeException
at com.google.android.gms.internal.mz.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by o.kD: Failed to gain exclusive lock to Firebase Database's offline persistence. This generally means you are using Firebase Database from multiple processes in your app. Keep in mind that multi-process Android apps execute the code in your Application class in all processes, so you may need to avoid initializing FirebaseDatabase in your Application class. If you are intentionally using Firebase Database from multiple processes, you can only enable offline persistence (i.e. call setPersistenceEnabled(true)) in one of them.
at com.google.android.gms.internal.nb.zzN(Unknown Source)
at com.google.android.gms.internal.nb.(Unknown Source)
at com.google.android.gms.internal.mx.zza(Unknown Source)
at com.google.android.gms.internal.qd.zzgQ(Unknown Source)
at com.google.android.gms.internal.qu.zzHg(Unknown Source)
at com.google.android.gms.internal.qu.zza(Unknown Source)
at com.google.android.gms.internal.qv.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:893)
at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:638)
at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:320)
at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:294)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:829)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:814)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:709)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1039)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.google.android.gms.internal.nb.zzN(Unknown Source)
at com.google.android.gms.internal.nb.(Unknown Source)
at com.google.android.gms.internal.mx.zza(Unknown Source)
at com.google.android.gms.internal.qd.zzgQ(Unknown Source)
at com.google.android.gms.internal.qu.zzHg(Unknown Source)
at com.google.android.gms.internal.qu.zza(Unknown Source)
at com.google.android.gms.internal.qv.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
我的应用程序中确实有多个进程,但使用以下代码中止子进程的 Application.onCreate 。
@Override
public void onCreate() {
super.onCreate();
if (FirebaseApp.getApps(this).isEmpty()) {
// No firebase apps; we are in a non-main process
return;
}
// Firebase init and other custom logic
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
Firebase 中没有 SQLiteDatabaseLockedException。这SQLite数据库锁定异常 https://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseLockedException.html当你使用时抛出SQLite
Android 的数据库和数据库引擎无法获取完成其工作所需的数据库锁。
如果该语句是 [COMMIT] 或发生在显式事务之外,则您可以重试该语句。如果该语句不是 [COMMIT] 并且发生在显式事务中,那么您应该在继续之前回滚该事务。
Edit:通过对详细堆栈跟踪的新编辑,我明白了错误是什么。当你设置的时候出现这个错误setPersistenceEnabled(true)
。必须在对您的设备执行任何其他操作之前完成此操作firebaseDatabase
目的。因此,我建议您使用以下代码:
public class HelperClass {
private static FirebaseDatabase firebaseDatabase;
public static FirebaseDatabase getDatabase() {
if (firebaseDatabase == null) {
firebaseDatabase = FirebaseDatabase.getInstance();
firebaseDatabase.setPersistenceEnabled(true);
}
return firebaseDatabase;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)