升级数据库时显示对话框

show dialog when upgrading database

首先,我很抱歉我的英语不好。

我想在升级数据库时显示对话框。 现在我尝试创建 AsyncTask 并将升级逻辑放在 'doInBackground' 上。 并且,用于 'preExecute' 和 'postExecute' 显示对话框。

看来效果不错。 但是,它有严重的问题。

当用户强制关闭应用程序(使用任务杀手或任务管理器)时,android 系统会误解每项工作都做得很好。

看看这个流量

[干得好]

数据库版本 = 1;

  1. 执行 onUpgrade()

  2. 执行异步任务。

  3. onPreExecute(), showProgressDialog.

  4. doInBackground(),正在迁移数据库。

  5. onPostExecute(), dismissProgressDialog.

数据库版本 = 2;


[糟糕的工作]

数据库版本 = 1;

  1. 执行 onUpgrade()

  2. 执行异步任务。

  3. onPreExecute(), showProgressDialog.

  4. doInBackground(),正在迁移数据库。

  5. 强制停止应用程序(使用任务杀手或任务管理器)

数据库版本 = 2;

数据库迁移没有完全执行,但是databaseVersion是2!!

我该如何解决这个问题?

数据库升级时,调用'onUpgrade()'。 一切顺利,'db.setVersion(newVersion);' 被调用。

下面的代码在'SQLiteOpenHelper.getDatabaseLocked(boolean writable)'

db.beginTransaction();
try {
    if (version == 0) {
        onCreate(db);
    } else {
        if (version > mNewVersion) {
            onDowngrade(db, version, mNewVersion);
        } else {
            onUpgrade(db, version, mNewVersion);
        }
    }
    db.setVersion(mNewVersion);
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

因此,升级中断时,数据库版本未设置为新版本。