升级数据库时显示对话框

时间:2015-02-05 02:39:43

标签: android sqlite

首先,我道歉,我的英语是小孩。

我希望在升级数据库时显示对话框。 现在我尝试创建AsyncTask并将升级逻辑放在' doInBackground'上。 并且,用于预先执行'和' postExecute' to showDialog。

这似乎很好。 但是,它有严重的问题。

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

看看这个流程

[好工作]

databaseVersion = 1;

  1. 执行onUpgrade()

  2. 执行AsyncTask。

  3. onPreExecute(),showProgressDialog。

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

  5. onPostExecute(),dismissProgressDialog。

  6. databaseVersion = 2;


    [糟糕的工作]

    databaseVersion = 1;

    1. 执行onUpgrade()

    2. 执行AsyncTask。

    3. onPreExecute(),showProgressDialog。

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

    5. 强制停止申请(使用任务杀手或任务管理员)

    6. databaseVersion = 2;

      数据库迁移未完全执行,但databaseVersion为2 !!

      我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

数据库升级时,调用'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();
}

因此,当升级是中断时,数据库版本不会设置为新版本。