这可能已经有了答案,我已经检查过了,但我不确定要寻找什么“Android SQLite onUpgrade 可以工作”?几周前我做了一些阅读,有点推迟了这个问题。
基本上我需要在数据库升级时做一些工作!震惊恐怖是对的(从其中包含 onUpgrade 的问题数量来看,我并不孤单)但就我而言,这意味着产生各种活动,这可能是一项相当大的工作。
我已经了解到,尽管通常最好“顺其自然”地使用 Android 的东西。
我不喜欢 onUpgrade 和 onDowngrade 这些假设升级是一个逆函数,而且工作复杂度低,无论数据库大小如何都不会花费太多时间。您没有机会向活动报告以指示它执行诸如“显示旋转加载的事情”之类的事情,您被困在 GUI 线程(主线程?)上。
我也不认为这是一个足够大的系统来提供帮助,特别是如果您将数据库表用作结构类型的数组。如果需要,我将对此进行扩展。
SO: 我在哪里工作?关于onUpgrade,我正在努力解决的问题是什么?
我的解决方案: 我打算废弃 onUpgrade 和 co,而是在我的设置表中存储一个修订号(基本上是键值对),然后我会将这个存储的数字与包含最新版本的常量进行比较,然后抛出,让活动捕获,或检查它是否已准备好。
这意味着我可以升级我喜欢的方式,但这确实意味着我必须将 SQLite 包装在我自己的小层中,这不是一件坏事,我已经包装了表,我认为不应该直接处理游标,但这是另一回事。
有什么我遗漏的东西,还是我应该自己升级。
我问不是因为这是一项艰巨的任务,因为您可以看到它不是,但是为什么 onUpgrade 存在?我错过了什么吗?
谢谢。
附录:我尝试在不阻塞主线程的情况下正确使用 onUpgrade(和内容提供程序)来“完整的 android”来处理更新,`Loader` 没有意义吗?在这里,但因为 ContentProviders 太过分了,但这个问题措辞不佳,只是为了充分披露。
附录 2
假设升级过程需要用户输入,并且升级处理程序想要启动一个活动,我无法从 onUpgrade 返回,直到数据库处于目标版本。我该怎么做呢?