Android 运行应用程序中的onUpgrade竞赛条件
我们正在android应用程序中成功地使用ormlite;为了维护数据库版本,我们使用如下方法: 最近,我们在该领域看到了“超自然活动”,应用程序处于数据库状态,它们不可能“正常”,并试图找到解释 一种可能是,当运行中的应用程序由Google Play自动升级时,会执行onUpgrade(),更改表和数据,而旧的(或新的?)应用程序,或者可能是它们的IntentService同时访问数据库,并得到奇怪的结果 (遗憾的是,没有简单的方法可以说“在升级之前完全停止我的应用程序,进行升级,然后完全重新启动”。这是my_PACKAGE_替换的意图,但关于如何使用它的意见大相径庭……) 所以我的问题是,是否有任何保护措施可以使onUpgrade()以独占方式运行,即阻止、锁定或同步任何内容,以确保在删除列(即重命名、重新创建、复制旧选项卡中的数据)时,其他线程不会访问我的表 如果没有,我怎样才能以最安全的方式完成这样的事情 谢谢和亲切的问候。好的,那么- 彻底的分析暴露了另一个(手工)问题(在我们的代码中),它导致了所有这些问题 所以,不要散布任何谣言:似乎在onUpgrade()中没有种族条件 如果知道为onUpgrade()提供一个(独占的?)事务块是否是一种好的做法,那就太好了,不过。。。 我确实使用begin transaction进行了一次迁移,并且sqlite在嵌套事务上抛出了一个错误,所以我非常确定onUpgrade()附近没有自动执行的迁移 请澄清其他问题 是,应用程序在升级之前会被终止。Android 运行应用程序中的onUpgrade竞赛条件,android,ormlite,Android,Ormlite,我们正在android应用程序中成功地使用ormlite;为了维护数据库版本,我们使用如下方法: 最近,我们在该领域看到了“超自然活动”,应用程序处于数据库状态,它们不可能“正常”,并试图找到解释 一种可能是,当运行中的应用程序由Google Play自动升级时,会执行onUpgrade(),更改表和数据,而旧的(或新的?)应用程序,或者可能是它们的IntentService同时访问数据库,并得到奇怪的结果 (遗憾的是,没有简单的方法可以说“在升级之前完全停止我的应用程序,进行升级,然后完全重
只有服务可能需要重新读取配置,而警报(计时器)可能需要重新启动。这里的弱破解只是为了看看它是否可以工作,但您可以尝试设置一个静态变量,在更新时将其设置为true,在更新完成时将其设置为false。您需要确保升级过程异步运行。然后,您可以在发出任何可能损坏的请求之前检查该标志。看起来不太理想,但可能?Google Play在尝试升级应用程序之前没有停止吗?相关问题:。不幸的是,没有答案-(您是否有多个
SQLiteOpenHelper
实现的实例?我们能够重现这个问题,而且它确实似乎是应用程序启动时的竞争条件,其中onUpgrade修改正在读取的表。我想知道onUpgrade是否不应该总是在BEGIN EXCLUSIVE事务块内执行……是吗你还记得导致所有这些问题的问题吗?我面临着非常相似的情况。