android - 将 WorkManager 从 1.0.0-alpha02 升级到 1.0.0-alpha03 时出现运行时异常
问题描述
当我WorkManager
从 1.0.0-alpha02 升级到 1.0.0-alpha03 时。
旧版本.gradle
def work_version = "1.0.0-alpha02"
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
// optional - Firebase JobDispatcher support
implementation "android.arch.work:work-firebase:$work_version"
新建 build.gradle
def work_version = "1.0.0-alpha03"
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
// optional - Firebase JobDispatcher support
implementation "android.arch.work:work-firebase:$work_version"
我注意到我需要进行以下更改
1.0.0-alpha02
public WorkerResult doWork() {
1.0.0-alpha03
public Result doWork() {
不过,这不是主要问题。但是,如果我们倾向于升级以前已经运行 using 的应用程序,1.0.0-alpha02
我们将得到以下运行时异常
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: WorkTag.tag, WorkTag.work_spec_id (code 1555)
at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:734)
at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1679)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.execSQL(FrameworkSQLiteDatabase.java:242)
at androidx.work.impl.WorkDatabaseMigrations$1.migrate(WorkDatabaseMigrations.java:73)
at android.arch.persistence.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:85)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:133)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:96)
at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
at android.arch.persistence.room.RoomDatabase.compileStatement(RoomDatabase.java:244)
at android.arch.persistence.room.SharedSQLiteStatement.createNewStatement(SharedSQLiteStatement.java:65)
at android.arch.persistence.room.SharedSQLiteStatement.getStmt(SharedSQLiteStatement.java:72)
at android.arch.persistence.room.SharedSQLiteStatement.acquire(SharedSQLiteStatement.java:87)
at androidx.work.impl.model.WorkSpecDao_Impl.resetScheduledState(WorkSpecDao_Impl.java:337)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:514)
at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:73)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
我可以知道有哪些解决方法,以避免这种运行时异常?
解决方案
Worker
我们为s in引入了隐式标签alpha03
。在极少数情况下,您有一个预先存在的标签,这会发生。我们将在 中解决这个问题alpha04
。敬请关注。
推荐阅读
- python - 在 Seaborn 组合折线图中添加图例
- javascript - 想在递归javascript中使用异步函数
- apache-kafka - 为客户服务设计基于事件的架构
- android - 相当于 Jetpack Compose Lazy Column/Row 中的 adapter.notifydatasetchange 或 Diffutils
- android - 无法运行反应本机应用程序android模拟器
- html - flexbox child 中的文本内容导致它覆盖它的邻居
- excel - 使用列作为条件对多行求和
- azure-functions - Azure Function .NET5:Microsoft.Azure.WebJobs.ServiceBus:ServiceBus 连接字符串“ServiceBusReadConnectionString”缺失或为空
- python - 解析项目内字符串,如 Python 中的 CLI 参数
- ios - 将 AVAudioEngine 与 AVComposition 和 AVAudioMix 一起使用