【发布时间】:2015-08-11 10:27:46
【问题描述】:
首先,我很抱歉我的英语很幼稚。
我想在升级数据库时显示对话框。 现在我尝试创建 AsyncTask 并将升级逻辑放在“doInBackground”上。 并且,用于 'preExecute' 和 'postExecute' 来显示对话框。
这似乎是件好事。 但是,它有一个严重的问题。
当用户强制关闭应用程序(使用任务杀手或任务管理器)时,android系统会误解每项工作都做得很好。
看看这个流程
[干得好]
数据库版本 = 1;
执行 onUpgrade()
执行 AsyncTask。
onPreExecute(), showProgressDialog.
doInBackground(),正在迁移数据库。
onPostExecute(),dismissProgressDialog。
数据库版本 = 2;
[糟糕的工作]
数据库版本 = 1;
执行 onUpgrade()
执行 AsyncTask。
onPreExecute(), showProgressDialog.
doInBackground(),正在迁移数据库。
强制停止应用程序(使用任务杀手或任务管理器)
数据库版本 = 2;
数据库迁移没有完全执行,但是databaseVersion是2!!
我该如何解决这个问题?
【问题讨论】:
-
如何设置新的数据库版本?
-
只使用 SQLiteOpenHelper。
-
new SQLiteOpenHelper(context, name, factory, version).getWritableDatabase();
-
如何确认数据库迁移没有正确执行?
-
我很高兴你这样做了☺。