显示在android中升级数据库时请稍候

时间:2015-07-10 15:14:25

标签: android sqlite

我想在下次更新时升级我的数据库,但我遇到了问题。我的升级太重了,花了2-3分钟在设备上(取决于设备的硬件)它包含删除一些表创建表并将数据从旧表移动到新表,我不想让用户看到白屏升级时,由于数据库升级是第一个运行的命令,我无法启动任何活动以查看请等待或任何其他数据。

为了解决这个问题,我使用了AsyncTask类,在onUpgrade数据库中我执行了一个asyncTask类来进行升级,我可以启动启动画面来通知用户申请需要一些时间。但是使用这个解决方案我失去了Transactional行为,如果设备已关闭,或者应用程序被杀死,我的应用程序面临更大的问题。

我知道如何在Transactional中运行我的多个代码,但据我所知,数据库版本已经增加,下次我启动应用程序数据库不再升级,应用程序不再工作。 (因为新表不存在)。

我认为在一个解决方案是跟踪我的升级数据库并保存到sharedPref中,并在下次启动时检查sharedPreference中的值,如果升级已完成,请让用户使用应用程序,否则完成升级过程。

我不认为这是最好的方式,所以我想问你,是否存在任何其他解决方案在后台升级数据库,如果问题发生,数据库升级重新开始?

提前致谢,谢谢你的时间。

PS:我知道如果在onUpgrade中发生任何错误,数据库升级重新开始,但是当我从UI线程升级到后台线程时,这种情况不再发生了,我不知道为什么。

1 个答案:

答案 0 :(得分:1)

首先,我没有足够的声誉来评论这就是我写这个答案的原因。

为什么不在服务器端执行此操作?使用任何服务器端脚本语言,无论何时升级数据库,只需锁定数据库,如果用户尝试访问数据库,则显示“当前处于维护状态的情况:在几分钟后回来”的消息。

通过这种方式,您不会干扰用户的工作,用户也不会在几分钟内回来。

我认为这比在速度和可靠性方面使用sharedPreference更好。

希望这会有所帮助。如果您需要任何帮助,请发表评论。

相关问题