【问题标题】:Runtime exception when upgrading WorkManager from 1.0.0-alpha02 to 1.0.0-alpha03将 WorkManager 从 1.0.0-alpha02 升级到 1.0.0-alpha03 时出现运行时异常
【发布时间】:2018-06-24 07:32:58
【问题描述】:

当我将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() {

不过,这不是主要问题。但是,如果我们倾向于升级以前已经使用 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)

我可以知道有哪些解决方法,以避免此类运行时异常?

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    我们在alpha03 中为Workers 引入了隐式标签。在极少数情况下,您有一个预先存在的标签,这会发生。我们将在alpha04 中解决这个问题。敬请关注。

    【讨论】:

    • 谢谢。我们希望一旦alpha04发布,我们可以从alpha02无缝升级到alpha04。同时,由于这个问题,我们已经停止升级到alpha03
    • 嗨,Rahul,您对alpha04 有任何估计的时间范围吗?因为,我们打算看看我们是否应该等待alpha04。谢谢。
    • alpha04 已于一周多前发布。以下是发行说明:developer.android.com/jetpack/docs/release-notes
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2022-11-13
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多