升级数据库时显示对话框
show dialog when upgrading database
首先,我很抱歉我的英语不好。
我想在升级数据库时显示对话框。
现在我尝试创建 AsyncTask 并将升级逻辑放在 'doInBackground' 上。
并且,用于 'preExecute' 和 'postExecute' 显示对话框。
看来效果不错。
但是,它有严重的问题。
当用户强制关闭应用程序(使用任务杀手或任务管理器)时,android 系统会误解每项工作都做得很好。
看看这个流量
[干得好]
数据库版本 = 1;
执行 onUpgrade()
执行异步任务。
onPreExecute(), showProgressDialog.
doInBackground(),正在迁移数据库。
onPostExecute(), dismissProgressDialog.
数据库版本 = 2;
[糟糕的工作]
数据库版本 = 1;
执行 onUpgrade()
执行异步任务。
onPreExecute(), showProgressDialog.
doInBackground(),正在迁移数据库。
强制停止应用程序(使用任务杀手或任务管理器)
数据库版本 = 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();
}
因此,升级中断时,数据库版本未设置为新版本。
首先,我很抱歉我的英语不好。
我想在升级数据库时显示对话框。 现在我尝试创建 AsyncTask 并将升级逻辑放在 'doInBackground' 上。 并且,用于 'preExecute' 和 'postExecute' 显示对话框。
看来效果不错。 但是,它有严重的问题。
当用户强制关闭应用程序(使用任务杀手或任务管理器)时,android 系统会误解每项工作都做得很好。
看看这个流量
[干得好]
数据库版本 = 1;
执行 onUpgrade()
执行异步任务。
onPreExecute(), showProgressDialog.
doInBackground(),正在迁移数据库。
onPostExecute(), dismissProgressDialog.
数据库版本 = 2;
[糟糕的工作]
数据库版本 = 1;
执行 onUpgrade()
执行异步任务。
onPreExecute(), showProgressDialog.
doInBackground(),正在迁移数据库。
强制停止应用程序(使用任务杀手或任务管理器)
数据库版本 = 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();
}
因此,升级中断时,数据库版本未设置为新版本。